2012-02-22 70 views
0

我有一個主View PersonEdit.cshtml綁定到Main類PersonEdit - 它在內部是許多模型的容器類,如BasicInfo,EductaionalInfo,EmploymentInfo等。 保存所有關於點擊PersonEdit.cshtml提交的信息。該視圖由許多部分視圖組成,這些視圖由不同的由AJAX異步調用的Action方法加載。 我面臨的問題是模型綁定不會發生在單擊PersonEdit.cshtml上的提交上,因爲部分視圖中的名稱與模型綁定的預期不同。模型綁定使用包含在主視圖中的強類型的很多部分視圖

類結構

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

我認爲你正在使用BasicInfo,EducationInfo和EmploymentInfo不同的部分景色。

Like

@Html.Partial("partialViewName",Model.basicInfo)在主視圖中。

讓你BasicInfo類像,

class BasicInfo 
{ 
    public string FirstName{get;set;} 
public string LastName{get;set;} 
} 

所以,在視圖中(如果你會看到源代碼),BasicInfo屬性的名稱將顯示像「姓」或「姓」而不是「basicInfo.FirstName」和「basicInfo.LastName」。因此,Model Model綁定器將無法將其綁定到PersonEdit類。

該解決方案將是,以EditorFor代替偏

使用,

@Html.EditorFor(m=>m.basicInfo,"editorFileName") 

編輯文件是相同的局部視圖,但在「EditorTemplates」文件夾將被放置structure.In此基礎對象屬性名稱將被添加到BasicInfo屬性的屬性名稱中。

+0

好的,但我沒有使用@ Html.partialView,而是部分視圖通過不同的控制器操作方法呈現。 – 2012-02-22 10:32:34

+1

好吧,在部分視圖中嘗試@ {Html.ViewData.TemplateInfo.HtmlFieldPrefix = ViewBag.PropertyPrefix}並在主視圖中設置ViewBag.PropertyPrefix =「basicInfo」 – Manas 2012-02-22 10:36:13

+0

謝謝。有效。 – 2012-02-22 11:17:53