这就像这里的 MVC 101,所以我对为什么这不起作用感到完全无助。我有一个非常基本的模型:
public class StockEnrollmentModel
{
[Required]
[DisplayName("Employee Name:")]
public string EmployeeName { get; set; }
}
我的观点如下:
@using (Html.BeginForm("SimulateForm", "HR", FormMethod.Post))
{
<div class="row">
<div class="col-md-6">
<div class="form-group">
@Html.LabelFor(e => e.EmployeeName)
@Html.TextBox("stock_employee_name", Model.EmployeeName)
</div>
</div>
</div>
<button type="submit" class="btn btn-primary" value="Submit">Submit</button>
}
我将发布到的网络服务需要输入字段的特定名称才能成功接收数据
例如,渲染的 html 需要读取:
<input type="stock_employee_name" type="text" />
经过多次谷歌搜索后,我确定需要使用 Html.Text 框才能控制生成的名称属性。
我遇到的问题是,当我提交表单时, Controller 中的模型完全没有数据。调查显示,表单以“employee_stock_name=Some Name”而不是“EmployeeName=Some Name”发布到服务器
根据我的研究,这种情况不应该发生,对吧?这种确切的情况应该是您使用 TextBox 而不是 TextBoxFor 的原因。
我错过了什么?
这是我的 Controller 的值(value):
[HttpPost]
public RedirectToRouteResult SimulateForm(StockEnrollmentModel model )
{
if ( ModelState.IsValid )
{
return RedirectToAction("SignForm", "HR", model);
}
return RedirectToAction("StockPurchase", model );
}
更新
下面接受的答案是我最终使用的。没有真正的方法可以轻松更改 HTML 字段的名称并维护 MVC 模型绑定(bind)。我最终更改了属性名称以匹配我需要名称字段读取的内容。
最佳答案
HtmlHelper.TextBox
的第一个参数function 是由该函数创建的输入元素的名称属性。您将“employee_stock_name”指定为该参数(因此作为输入元素的名称属性),因此这就是通过线路发送的内容。
您应该指定正确的名称:
@Html.TextBox("EmployeeName", Model.EmployeeName)
或者使用HtmlHelper.TextBoxFor
自动生成:
@Html.TextBoxFor(m => m.EmployeeName)
关于c# - 指定名称的 MVC 文本框未在帖子上绑定(bind)模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359355/