2015-01-15 26 views
1

我正在使用post方法,其中我正在將文本框的值發佈到數據庫,爲此我正在執行所有必要的步驟,但是在該post方法中,我的模型爲null。找到下面的代碼, 我簡單的控制器mvc4中的模型值爲null

[HttpPost] 
    public ActionResult Index(QuestionBankModel question) 
    { 
     return View(); 
    } 

我的模型

public class QuestionBankModel 
    { 
     public string question { get; set; } 
    } 

我查看

@model OnlinePariksha.Models.QuestionBankModel 
@{ 
    var CustomerInfo = (OnlinePariksha.Models.UserLoginModel)Session["UserInfo"]; 
} 
@{ 
    ViewBag.Title = "Index"; 
} 
@{ 
    Layout = "~/Views/Shared/Admin.cshtml"; 
} 
@using (Html.BeginForm("Index", "AdminDashboard", FormMethod.Post)) 
{ 
<div id="questionsDiv" style="width:100%; display:none;"> 
    <div style="width:200px"> 
     <table style="width:100%"> 
      <tr> 
       <td><span><b>Question:</b></span></td> 
       <td> 
        @Html.TextBox(Model.question, new Dictionary<string, object> { { "class", "textboxUploadField" } }) 
       </td> 
      </tr> 

     </table> 
    </div> 
    <div class="clear"></div> 
    <div> 
     <input type="submit" class="sucessBtn1" value="Save" /> 
    </div> 
</div> 
} 

我錯過了什麼?

+0

所以QuestionBankModel有1個屬性:問題。在HttpPost上觸發Index操作時,該問題的值爲空? – Minh

回答

1

你的問題是,POST方法的參數名稱是相同的名稱作爲您模型屬性(並因此模型綁定失敗)。將方法簽名更改爲

public ActionResult Index(QuestionBankModel model) 
{ 
    ... 
} 

或與模型屬性不相同的任何其他參數名稱。

作爲解釋,DefaultModelBinder首先初始化QuestionBankModel的新實例。然後檢查表單(和其他)值,並看到question="SomeStringYouEntered"。然後它搜索名爲question的屬性(以設置其值)。它找到的第一個是你的方法參數,所以它在內部確實是QuestionBankModel question = "SomeStringYouEntered";,它失敗了(你不能將一個串分配給一個複雜的對象),現在模型參數變爲null

0

您是否嘗試過使用@ HTML.TextBoxFor?

@Html.TextBoxFor(m=>m.question,new Dictionary<string, object> { { "class", "textboxUploadField" } }) 
+0

雅我試過,但沒有成功 –

+0

也許@ Rono的回答是正確的嗎? – Minh

+0

我也試過,它不工作 –

0

Html.TextBox使用不正確,因爲第一個參數是文本框的名稱,並且您傳遞的是問題的值。我會使用它代替:

@Html.TextBoxFor(m => m.question) 
+0

我用同樣的,但它不工作 –