2014-02-20 30 views
4

我正在使用ASP.NET MVC-5應用程序。我在Razor partial View中獲得了表單,並且它需要多個模型,所以我使用ViewModel;把所有的類(模型),參考在如下從視圖使用viewModel類將數據發佈到控制器-ASP.NET MVC5

public class QualificationViewModel 
{  
    public Qualification _Qualification; 

    //public Subject _Subject; 

    //public FeeScheme _FeeScheme; 

} 

現在的時間感,我使用僅資質模型只是爲了測試我的代碼,但我無法從視圖中的數據發送到控制器的方法。我在控制器的方法獲得在調試空值

[HttpGet] 
    public ActionResult CreateNewQualification() 
    { 
     return PartialView("PartialQualification_Create"); 

    } 

    [HttpPost] 
    public ActionResult CreateNewQualification(QualificationViewModel newQualificationData) 
    { 
     try 
     { 
      if (ModelState.IsValid) 
      { 
       //code here... 
      } 
     } 
     catch (DataException ex) 
     { 
      ModelState.AddModelError("", "Unable To Create New Qualification!" + ex); 
     } 

     return RedirectToAction("QualificationHome"); 
    } 

我使用jQuery的Ajax方法來發布數據,以類似的方式我已經成功地發送了一個模型類數據的....

function submit_createNewQualification() 
{  
    alert(JSON.stringify($("#NewQualificationForm").serializeObject())); 

    $.ajax({ 
     type: "Post", 
     url: "/Qualification/CreateNewQualification", 
     dataType: "json", 
     contentType: "application/json; charset=utf-8", 
     data: JSON.stringify({ newQualificationData: $("#NewQualificationForm").serializeObject() }), 
     success: function (data) { 
      if (data == true) { 
       window.location = "/Qualification/QualificationHome"; 
      } 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
     } 
    }); 

} 

和我有以下考慮形式...

@model DatabaseLayer.ViewModels.QualificationViewModel 

    @using (Html.BeginForm("CreateNewQualification", "Qualification", FormMethod.Post, new { id = "NewQualificationForm" })) 
    { 
     @Html.AntiForgeryToken() 
    <div class="form-group"> 
     @Html.LabelFor(model => model._Qualification.QualificationTitle, new { @class = "control-label col-md-3" }) 
      <div class="col-md-6"> 
      @Html.EditorFor(model => model._Qualification.QualificationTitle) 
      @Html.ValidationMessageFor(model => model._Qualification.QualificationTitle) 
      </div> 
      </div> 

      <div class="form-group"> 
       @Html.LabelFor(model => model._Qualification.Active, new { @class = "control-label col-md-3" }) 
      <div class="col-md-6 custom-checkBox-block-1"> 
       @Html.EditorFor(model => model._Qualification.Active) 
       @Html.ValidationMessageFor(model => model._Qualification.Active) 
       </div> 
      </div> 

    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Create Qualification" onclick="submit_createNewQualification()" class="btn btn-default" /> 
     </div> 
     </div> 
} 

許多感謝...

回答

5

試試這個

public class QualificationViewModel 
{  
    public Qualification _Qualification {get; set;} 

//public Subject _Subject; 

//public FeeScheme _FeeScheme; 

} 

[HttpGet] 
public ActionResult CreateNewQualification() 
{ 
    var Model = new QualificationViewModel(); 
    return PartialView("PartialQualification_Create",model); 

} 
+0

你是明星馬特...它的作品..非常感謝 – toxic

2

你D on't需要JSON字符串化模型,只需簡單地把你的形式的序列化版本,默認MVC模型綁定將處理其餘部分:

data: $("#NewQualificationForm").serialize() 
+0

確定我嘗試在如你所說......但測試代碼與單一模式,它的工作原理......我相信是在ViewModel的問題! – toxic

相關問題