模型值在mvc4中为null

时间:2015-01-15 19:54:47

标签: asp.net-mvc-4

我正在使用post方法,我试图将textbox的值发布到数据库,为此我正在执行所有必要的步骤,但在该post方法中我的模型为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>
}

我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

您的问题是POST方法参数名称与您的模型属性同名(并且结果模型绑定失败)。将方法签名更改为

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

或与模型属性不同的任何其他参数名称。

作为解释,DefaultModelBinder首先初始化QuestionBankModel的新实例。然后检查表单(和其他)值并查看question="SomeStringYouEntered"。然后,它搜索名为question的属性(以便设置其值)。它找到的第一个是你的方法参数,所以它在内部QuestionBankModel question = "SomeStringYouEntered";失败(你不能将一个串子分配给一个复杂的对象),而模型参数现在变成null

答案 1 :(得分:0)

您是否尝试过使用@ HTML.TextBoxFor?

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

答案 2 :(得分:0)

Html.TextBox使用不正确,因为第一个参数是文本框的名称,并且您传递了问题的值。我会改用它:

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