Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定名称的MVC文本框未在post上绑定模型_C#_Asp.net Mvc_Html Helper - Fatal编程技术网

C# 指定名称的MVC文本框未在post上绑定模型

C# 指定名称的MVC文本框未在post上绑定模型,c#,asp.net-mvc,html-helper,C#,Asp.net Mvc,Html Helper,这就像这里的MVC101,所以我对它为什么不起作用感到完全无助。我有一个非常基本的模型: public class StockEnrollmentModel { [Required] [DisplayName("Employee Name:")] public string EmployeeName { get; set; } } 我的观点是这样的: @using (Html.BeginForm("SimulateForm", "HR", FormMethod.Pos

这就像这里的MVC101,所以我对它为什么不起作用感到完全无助。我有一个非常基本的模型:

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字段的名称并维护MVC模型绑定。最后,我更改了属性名,以匹配需要读取的名称字段。

函数的第一个参数是该函数创建的输入元素的name属性。您将“employee\u stock\u name”指定为该参数(并因此指定为输入元素的name属性),因此这就是通过网络发送的内容

您应该指定正确的名称:

@Html.TextBox("EmployeeName", Model.EmployeeName)
或者使用
HtmlHelper.TextBoxFor
自动生成:

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

如果您确实需要将html呈现为
,您可以在模型的属性中添加以下属性:
[Bind(Prefix=“stock\u employee\u name”)]
-但这是一种黑客行为,听起来您好像误解了其他地方的要求?为什么输入名称必须是“employee\u stock\u name”?

您可以通过将name参数传递到helper方法的htmlAttributes对象参数,将呈现文本框的名称从
@Html.TextBoxFor
更改

@Html.TextBoxFor(model => model.EmployeeName, new { Name = "stock_employee_name" })
这将在发回控制器时中断您的模型绑定,但至少您的姓名将正确地显示在表单上,并且在最初创建表单时,数据将被填充


但是,您可以使用Request.Form[“stock\u employee\u name”]来检索控制器post操作中的数据。

您是否尝试过使用
@Html.TextBoxFor
而不是带有自定义id的
@Html.TextBox
,我要发布到的Web服务要求name字段具有指定的值作为初始值或不应更改的值?正如在呈现的html中需要读取的那样,因此它与值无关,而是与TextBox控件的名称有关-它应该是此特定值吗?重命名模型类中的字段并使用TextBoxFor。同样,需要读取呈现的html。我一直在寻找一些帖子,其中呈现的html字段的名称与模型属性名称不同。所以我不认为这是个问题。这一功能的存在是有原因的。如果要将属性命名为PersonId,但将查询字符串读取为Id=,该怎么办?相反有了这些限制,我应该能够使这项工作。如果传入自定义名称属性会破坏模型绑定,那么为什么会存在文本框?您希望MVC如何将
employee\u stock\u name
映射到
EmployeeName
?如果您的Web服务需要“雇员股票名称”来阅读它,为什么您希望它是“EmployeeName”?编辑:让我添加以下内容:StockEnrollmentModel上您希望填入值的属性的名称是什么?另外,您展示的控制器/操作是否也包括您提到的web服务?或者是因为某种原因,它们是两种不同的东西吗?当我在搜索结果中看到这个问题时,就是当你有嵌套的模型,并且绑定到如下内容时:@Html.TextBox(“MyPreferedName”,Model.SearchParams.someParam)如果这不是应该使用的,请帮助我理解为什么上面的代码(在这里找到:)与我的用例有什么不同吗?MVC是如何知道如何绑定的?检查我对上一条评论的编辑和我添加到OP中的评论。讨论中缺少了一些东西,试图找出什么。因此,本质上,你的问题是“如何让MVC绑定系统将字段绑定到具有不同名称的属性[出于模拟/伪造的目的]”这准确吗?我发布到的Web服务有我试图填充的相应字段。对于这些字段,有些名称非常模糊,因此更改我的模型属性以反映web服务所期望的所有字段并不理想。很抱歉,这听起来像是您必须要做的繁重工作-使用理解下划线大小写的自定义模型绑定器,您可能会减轻一些负担,但如果没有一个有用的提示,它不会神奇地将stock_employee_name解析为EmployeeName。
@Html.TextBoxFor(m => m.EmployeeName)
@Html.TextBoxFor(model => model.EmployeeName, new { Name = "stock_employee_name" })