2015-08-26 42 views
1

這是我第二次發生這種情況,我不知道發生了什麼。我有一個強類型和使用控制器模型被送入一個MVC視圖:MVC查看沒有將模型傳回控制器,奇怪的錯誤?

public ActionResult EditSubscription (String subName){ 

       DutiesWeb.Models.EditSubscriptionViewModel mod = new Models.EditSubscriptionViewModel(subName); 
       return View("EditSubscription", mod); 

     } 

一切然後顯示在編輯頁面上的罰款:

@model DutiesWeb.Models.EditSubscriptionViewModel 

@{ 
    ViewBag.Title = "EditSubscription"; 
} 

<h2>EditSubscription</h2> 



@using (Html.BeginForm("EditSubscriptionSubmitAction","Home", FormMethod.Post)) { 

    <div class="form-horizontal"> 
     <div class="form-group"> 
      <div class="col-lg-12"> 

      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-lg-2"> 
       @Html.LabelFor(model => model.subscription.subscriptionName, new { @class = "control-label" }) 
      </div> 
      <div class="col-lg-10"> 
       @Html.TextBoxFor(model => model.subscription.subscriptionName, new { @class = "form-control" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-lg-2"> 
       @Html.LabelFor(model => model.subscription.messageCount, new { @class = "control-label" }) 
      </div> 
      <div class="col-lg-10"> 
       @Html.TextBoxFor(model => model.subscription.messageCount, new { @class = "form-control" }) 
      </div> 
     </div> 



     <div class="form-group"> 
      <div class="col-lg-2"> 
       @Html.LabelFor(model => model.subscription.lastAccessed, new { @class = "control-label" }) 
      </div> 
      <div class="col-lg-10"> 
       @Html.TextBoxFor(model => model.subscription.lastAccessed, new { @class = "form-control" }) 
      </div> 
     </div> 




     <div class="form-group"> 
      <div class="col-md-2"> 
       @Html.LabelFor(model => model.subscription.status, new { @class = "control-label" }) 
      </div> 
      <div class="col-md-10"> 
       @Html.DropDownListFor(model => model.subscription.status, 
       (IEnumerable<SelectListItem>)Model.subscriptionActiveOptions, 
       "Please Select ...", new { @class = "form-control", @id = "ddlSubscriptionActive" }) 
       @Html.ValidationMessageFor(model => model.subscription.status) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-lg-10 col-lg-offset-2"> 
       <input type="submit" value="Save Changes" class="btn btn-primary" /> 
       <input type="button" value="Delete" class="btn btn-danger" /> 
      </div> 
     </div>  
    </div>} <!--Yes, I have remembered the closing bracket--> 

但是,每當我嘗試並提交使用「保存更改」按鈕的形式(或其他任何提交按鈕,我把頁面上),我得到那些討厭的一個IIS白色和黃色的錯誤,指出:

No parameterless constructor defined for this object. 
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.MissingMethodException: No parameterless constructor defined for this object. 

它幾乎一樣,如果查看已經忘記了它已被賦予一個模型,因爲它顯然希望調用一個方法在控制器與簽名

公衆的ActionResult EditSubscriptionSubmitAction(){}

而不是

public ActionResult EditSubscriptionSubmitAction (DutiesWeb.Models.EditSubscriptionViewModel model) {} 

,我不知道爲什麼。有人有主意嗎?

+0

由於雙方斯蒂芬·馬克和裏克,現在問題解決了。我之前並沒有聽說過'必須有無參數的構造函數'約束,但想到它,它確實很有意義。因爲引用了GetInstance(),所以給了Stephen一個信用,但是任何一個答案都可以配上道具,因爲他們都幫我解決了。感謝您的時間。 – Adamski343

+0

還有另外一種解決方法,就是創建一個自定義模型綁定器,查看一下,很高興答案有幫助。 – Ric

回答

3

您的模型必須具有無參數構造函數。 DefaultModelBinder首先需要初始化並實例化您的模型(內部使用Activator.GetInstance()),這需要無參數的構造函數。

在模型中

public class EditSubscriptionViewModel 
{ 
    // parameterless constructor 
    public EditSubscriptionViewModel() 
    { 
    } 
    public EditSubscriptionViewModel(string subName) 
    { 
    // set property values 
    } 
    .... 
} 
1

方法EditSubscriptionSubmitAction採用EditSubscriptionViewModel類型的參數,該參數的構造函數定義爲string參數。

ModelBinder不能實例化這個對象,所以刪除構造函數,也許考慮有一個屬性。

public class EditSubscriptionViewModel 
{ 
    public string SubName { get; set; } 
} 
相關問題