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

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 发布具有多个部分视图的表单前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试发布一个由两个强类型视图组成的表单。这个问题是相似的,但没有答案:

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的很好的介绍。

猜你在找的asp.Net相关文章