我正在创建一个动态的文本框列表。当用户提交字段中的值时返回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?
答案 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。