MVC3文本框提交null值?

时间:2012-01-25 08:48:24

标签: asp.net-mvc-3 razor

我正在创建一个动态的文本框列表。当用户提交字段中的值时返回null。我想我错过了什么。

这是我的产品型号:

public class EnqProduct
{
    public string Id { get; set; }
    public string Product { get; set; }
    public string Quantity { get; set; }
}

这是包含上述列表的页面模型。

public IList<EnqProduct> EnqProduct { get; set; }

这就是我设置模型的方式:

IList<EnqProduct> items2 = Session["enquiry"] as IList<EnqProduct>;
var EnquiryModel = new Enquiry { 
       EnqProduct = items2  
};      
return View(EnquiryModel);

这就是我显示字段的方式:

foreach (var item in Model.EnqProduct)
{
 <tr>
   <td>
      <span class="editor-field">
         @Html.TextBox(item.Id, item.Product)
         @Html.ValidationMessageFor(m => m.A1_Enquiry)
      </span>  
      <br><br>                              
    </td>
    <td>
      <span id = "field" class="editor-field">
         @Html.TextBox(item.Id, item.Quantity)
      </span>      
      <br><br>                              
    </td>
  </tr>
 }

当用户提交字段时,返回控制器null?

1 个答案:

答案 0 :(得分:2)

我建议您使用编辑器模板并使用以下内容替换foreach循环:

@model Enquiry
<table>
    <thead>
        <tr>
            <th>product name</th>
            <th>quantity</th>
        </tr>
    </thead>
    <tbody>
        @Html.EditorFor(x => x.EnqProduct)
    </tbody>
</table>

然后定义一个编辑器模板,该模板将自动为EnqProduct集合(~/Views/Shared/EditorTemplates/EnqProduct.cshtml)的每个元素呈现:

@model EnqProduct
<tr>
    <td>
        @* We include the id of the current item as hidden field *@
        @Html.HiddenFor(x => x.Id)

        <span class="editor-field">
            @Html.EditorFor(x => x.Product)
            @Html.ValidationMessageFor(x => x.Product)
        </span>  
    </td>
    <td>
        <span id="field" class="editor-field">
            @Html.EditorFor(x => x.Quantity)
        </span>      
    </td>
</tr>

现在,当您提交表单时,您将获得正确的值:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var model = new Enquiry();
        model.EnqProduct = ...
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(Enquiry model)
    {
        // the model.EnqProduct will be correctly populated here
        ...
    }
}

对于输入字段的默认模型绑定器所需的正确有线格式,我建议您查看following article。当某些模型未正确填充时,它将允许您更轻松地调试功能中的问题。只需查看FireBug以及POST的值的名称就足够了,您将立即知道它们是正常还是KO。