Asp.net mvc Can';t为value属性设置Html.hidden

Asp.net mvc Can';t为value属性设置Html.hidden,asp.net-mvc,razor,mvc-editor-templates,html.hiddenfor,Asp.net Mvc,Razor,Mvc Editor Templates,Html.hiddenfor,我正在尝试使用编辑器模板和实体框架创建一个自定义的创建表单。我遇到的问题是,我所有的字段都没有设置值属性。这会在处理隐藏键值时在ModelState中引发错误,因为它实际上没有值。这是我正在做的一个例子 Car.cs public class Car { [Key] [HiddenInput(DisplayValue = false)] public int CarID{ get; set; } [required] public string Make

我正在尝试使用编辑器模板和实体框架创建一个自定义的创建表单。我遇到的问题是,我所有的字段都没有设置值属性。这会在处理隐藏键值时在ModelState中引发错误,因为它实际上没有值。这是我正在做的一个例子

Car.cs

public class Car
{
    [Key]
    [HiddenInput(DisplayValue = false)]
    public int CarID{ get; set; }

    [required]
    public string Make { get; set; }

    [required]
    public string ModelName { get; set; }

    [required]
    public int Year { get; set; }
}
Car.cshtml(编辑器模板)

CreateCar.cshtml(视图)

控制台日志将显示
form.serialize()
返回以下字符串:

"CarID=&ModelName=Camry&Make=Toyota&Year=2010"

这表明CarID没有任何价值。这也是迄今为止我在应用程序中使用的唯一一个JS,它发生在表单已经设置好之后,这就是为什么我认为Html帮助程序发生了一些奇怪的事情。

在使用
HtmlHelper
方法时,您从未设置
value
属性。这些方法已经正确地做到了这一点,首先使用
ModelState
值(如果存在),然后从
ViewData
开始,最后从属性值开始。除了它没有为int设置值,即使我没有尝试在那里设置value属性。因此,我觉得有必要首先将它放进去。它将根据您显示的代码正确设置。我只能假设您有导致问题的其他代码(获取
value=”“
的唯一方法是属性为
int?
(可为空)当您将模型传递到视图时,其值为
null
。我可以确认属性不是
int?
,并且从未设置该值。我有其他属性设置相同的模型,并且没有此问题。唯一的区别是我没有为它们使用编辑器模板。但是我尝试了此模型在没有编辑器模板的情况下,它仍然存在问题。这可能是您没有向我们展示的其他代码(可能是一些javascript)的结果当使用
HtmlHelper
方法时,您从未设置
value
属性。这些方法已经正确地做到了这一点,首先使用
ModelState
值(如果存在),然后从
ViewData
开始,最后从属性值开始。除了它没有为int设置值,即使我没有尝试设置值属性。因此,我觉得有必要首先将其放入。它将根据您显示的代码正确设置。我只能假设您有其他导致问题的代码(获取
value=“”
的唯一方法是属性为
int?
(可为空)当您将模型传递到视图时,其值为
null
。我可以确认属性不是
int?
,并且从未设置该值。我有其他属性设置相同的模型,并且没有此问题。唯一的区别是我没有为它们使用编辑器模板。但是我尝试了此模型在没有编辑器模板的情况下,它仍然存在问题。这可能是您没有向我们展示的其他代码(可能是一些javascript)的结果
@model Car

<form id="create-car-form" method="post">
    @Html.EditorForModel()
    <a onclick="SubmitForm()">Submit</a>
</form>
<input data-val="true" data-val-required="The CarID field is required." id="CarID" name="CarID" type="hidden" value>
<input data-val="true" data-val-required="The CarID field is required." id="CarID" name="CarID" type="hidden" value="">
<div>
    @Html.Partial("CreateCar", new Car());
</div>
function SubmitForm() {
    var form = $('#create-car-form');
    $.ajax({
        type: "POST",
        url: "Home/CreateCar",
        data: form.serialize(),
        dataType: 'html',
        success: function (data) {
            console.log(form.serialize();
        }
    });
}
"CarID=&ModelName=Camry&Make=Toyota&Year=2010"