我有一个主View PersonEdit.cshtml绑定到Main类PersonEdit-它内部是许多模型的容器类,如BasicInfo,EductaionalInfo,EmploymentInfo等。 我在PersonEdit.cshtml上保存点击提交的所有信息。 View由许多部分视图组成,这些视图由AJAX异步调用的不同Action方法加载。 我面临的问题是在PersonEdit.cshtml上单击Submit时不会发生Model Binding,因为Partial视图中的名称与Model Binding的预期名称不同。
班级结构
public class PersonEdit
{
BasicInfo basicInfo { get; set; }
EducationalInfo eduInfo { get; set; }
EmploymentInfo empInfo { get; set; }
}
请告诉我如何在这种情况下完成模型绑定。
我正在加载像这样的部分视图:
//Basic Info
$(document).ready(function () {
DisplayBasicInfo();
});
function DisplayBasicInfo() {
var $MainContent = $("#divBasicInfo");
var resourceURL = "/Home/Home/GetBasicInfo";
var personID = $("#PersonEdit_PersonID").val();
personID = 0;
$MainContent.css("text-align", "center");
$.ajax({
cache: false,
type: "GET",
async: true,
url: resourceURL,
dataType: "text/html",
data: { personID: personID },
success: function (data) {
$MainContent.html(data);
$.validator.unobtrusive.parse($("#divBasicInfo"));
},
error: function (xhr) {
$('#divBasicInfo').show().html("Unexpected Error in basic Info- Please contact administrator!");
$("#divBasicInfo").dialog({
modal: true,
width: 'auto',
opacity: 0.7,
height: 'auto',
position: 'center',
title: 'Warning',
buttons: {
'OK': function () { $(this).dialog("close"); }
}
});
}
});
}
答案 0 :(得分:0)
我认为您正在为BasicInfo,EducationInfo和EmploymentInfo使用不同的部分视图。
喜欢
@Html.Partial("partialViewName",Model.basicInfo)
在主视图中。
让你的BasicInfo类就像,
class BasicInfo
{
public string FirstName{get;set;}
public string LastName{get;set;}
}
因此,在视图中(如果您将看到源代码),BasicInfo的属性名称将显示为“FirstName”或“LastName”,而不是“basicInfo.FirstName”和“basicInfo.LastName” .So Model binder将无法将其绑定到PersonEdit类。
解决方案将是EditorFor而不是Partial
使用,
@Html.EditorFor(m=>m.basicInfo,"editorFileName")
编辑器文件与部分视图相同,但将放在“EditorTemplates”文件夹结构下。此基础对象属性名称将添加到BasicInfo属性的属性名称中。