ASP.NET MVC中如何通过ActionLink将报表TITLE传递到评论新增页
解决方案
步骤1:修改报表列表页的ActionLink参数
你需要在Add comment的ActionLink中新增路由参数,把当前行的报表ID和TITLE传递给评论控制器的Create动作,注意匹配ActionLink的重载方法,末尾加null作为htmlAttributes的占位参数:
@Html.ActionLink("Add comment", "Create","COMMENTs", new { reportId = item.REPORT_ID, reportTitle = item.TITLE }, null)
步骤2:修改COMMENTs控制器的Create(GET)方法
在控制器的新增评论入口方法中接收传递过来的参数,把报表标题和预选中的报表ID传递给新增页视图:
public ActionResult Create(int reportId, string reportTitle) { // 预选中当前报表作为评论所属报表,替换你原来生成下拉选项的逻辑即可 ViewBag.ID_REPORTE = new SelectList(你的数据库上下文.reports, "REPORT_ID", "TITLE", reportId); // 存储报表标题给视图调用 ViewBag.ReportTitle = reportTitle; return View(); }
步骤3:在Create_Comments.HTML中使用传递过来的报表标题
你可以直接在视图中展示当前要添加评论的报表标题,也可以根据业务需求把标题存入隐藏域随表单提交:
<!-- 直接展示标题 --> <p>当前评论所属报表:*@ViewBag.ReportTitle*</p> <div class="form-group"> @Html.LabelFor(model => model.ID_REPORTE, "ID_REPORTE", htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.DropDownList("ID_REPORTE", null, htmlAttributes: new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.ID_REPORTE, "", new { @class = "text-danger" }) </div> </div> <!-- 如果不需要用户修改所属报表,可以直接把下拉替换为隐藏域,简化操作 --> <!-- @Html.HiddenFor(model => model.ID_REPORTE, new { @Value = ViewBag.ID_REPORTE.SelectedValue }) -->
可选优化方案
如果你的项目规范不推荐使用ViewBag,也可以自定义评论新增页的ViewModel,新增ReportTitle和ReportId字段,在控制器中给ViewModel赋值后传递给视图,类型安全更易维护。
内容的提问来源于stack exchange,提问作者Ricardo Campos
相关产品推荐
相关产品推荐

