加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 发布具有多个部分视图的表单

发布时间:2020-12-15 18:49:07 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试发布一个由两个强类型视图组成的表单。这个问题是相似的,但没有答案: MVC 3 Razor Form Post w/ Multiple Strongly Typed Partial Views Not Binding 当我提交表单时,提交给控制器的模型始终为空。我花了几个小时试图让这个工作。这似乎应该是
我正在尝试发布一个由两个强类型视图组成的表单。这个问题是相似的,但没有答案:

MVC 3 Razor Form Post w/ Multiple Strongly Typed Partial Views Not Binding

当我提交表单时,提交给控制器的模型始终为空。我花了几个小时试图让这个工作。这似乎应该是简单的。我在这里缺少什么?我不需要做ajax只需要能够发布到控制器并呈现一个新的页面。

谢谢

这是我的视图代码:

<div>
    @using (Html.BeginForm("TransactionReport","Reports",FormMethod.Post,new {id="report_request"}))
    {
        ViewContext.FormContext.ValidationSummaryId = "valSumId";
        @Html.ValidationSummary(false,"Please fix these error(s) and try again.",new Dictionary<string,object> { { "id","valSumId" } });
        @Html.Partial("_ReportOptions",Model.ReportOptions);
        @Html.Partial("_TransactionSearchFields",new ViewDataDictionary(viewData) { Model = Model.SearchCriteria });
    }

这是控制器中的代码:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult TransactionReport(TransactionReportRequest reportRequest)
{
    var reportInfo = new List<TransactionReportItem>();

    if (ModelState.IsValid)
    {
        var reportData = _reportDataService.GetReportData(Search.MapToDomainSearchCriteria(reportRequest.SearchCriteria));
        if (reportData!=null)
        {
            reportInfo = reportData.ToList();
        }
        return View(reportInfo);
    }
    return View(reportInfo);
}

部分观点本身是相当无关紧要的,因为他们所做的一切都是在模仿和展示他们的模型。

解决方法

部分不是去这里的方式。您正在寻找EditorTemplates,这些是为您想要的。这种情况下,您的属性将很好地绑定到您的模型(您将提交)。

您的主视图将具有此窗体(请注意,您只需使用EditorFor而不是Partial;在这种情况下,您可能需要将该viewData参数放在ViewBag中):

@using (Html.BeginForm("TransactionReport",new {id="report_request"}))
{
    ViewContext.FormContext.ValidationSummaryId = "valSumId";
    @Html.ValidationSummary(false,"valSumId" } });
    @Html.EditorFor(model => model.ReportOptions);
    @Html.EditorFor(model = Model.SearchCriteria });
}

现在你只需要拖动你的部分到文件夹?/ Shared / EditorTemplates /,并重命名它们以匹配模型名称,他们是它们的编辑器模板。

还要看看here对EditorTemplates的很好的介绍。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读