Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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# HttpPost创建后填充的字段-使用输入的对象为null_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# HttpPost创建后填充的字段-使用输入的对象为null

C# HttpPost创建后填充的字段-使用输入的对象为null,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在学习ASP.NETMVC5。我创建了一个视图“Create”。但我并没有使用Razor来生成输入字段,而是使用纯html的输入 Create.cshtml @model MyProject.Product <h2>Create Product</h2> <form method="post"> Description: <br /> <input type="text" name="Description" i

我正在学习ASP.NETMVC5。我创建了一个视图“Create”。但我并没有使用Razor来生成输入字段,而是使用纯html的输入

Create.cshtml

@model MyProject.Product

<h2>Create Product</h2>

<form method="post">

    Description: <br /> 
    <input type="text"  name="Description" id="Description"/> <br />
    ValueType: <br />
    <input type="text" name="ValueType" id="ValueType"/>
    <br />
    <input type="submit" name="btSend"/>

</form>
但是我需要在模型中使用一些带有注释的服务器端验证。 因此,我希望发送数据,如果模型无效,则返回创建值。我知道如何放置验证消息。所以,我试过这个:

  @model MyProject.Product

<h2>Create Product</h2>

<form method="post">

    Description: <br /> 
    <input type="text"  name="Description" id="Description" value="@Model.Description"/> <br />
    ValueType: <br />
    <input type="text" name="ValueType" id="ValueType" value="@Model.ValueType"/>
    <br />
    <input type="submit" name="btSend"/>

</form>
@model MyProject.Product
创造产品
说明:

ValueType:

如何将纯输入与html绑定到模型

为什么是空值


非常感谢。

如果您不想使用基于剃刀的表单方法,您可以将显示验证消息与
Viewbag/ViewData一起使用

   [HttpPost]
    public ActionResult Create(Product product)
    {
        if (!ModelState.IsValid)
        {   
            //if you want to get validation message from ModelState itself, you can query from Modelstate :
           string message = string.Join(" , ", ModelState.Values
                              .SelectMany(v => v.Errors)
                               .Select(e => e.ErrorMessage));
            ViewData["ValidationMessage"] = "Validation Message";// you can use above variable message here
            return View(product);
        }
     // your other implementation
    }
你的观点应该是这样的:

@model MyProject.Product

<h2>Create Product</h2>

<form method="post">
    <div class="error-message">@ViewData["ValidationMessage"]</div>
    Description: <br /> 
    <input type="text"  name="Description" id="Description" value="@Model.Description"/> <br />
    ValueType: <br />
    <input type="text" name="ValueType" id="ValueType" value="@Model.ValueType"/>
    <br />
    <input type="submit" name="btSend"/>

</form>
@model MyProject.Product
创造产品
@ViewData[“ValidationMessage”]
说明:

ValueType:


但是,如果允许的话,我建议您使用基于razor的表单方法。

我想您可能会误解razor视图引擎。第2.0页和第3.0页(razor)没有任何方式的数据绑定。它使用html助手模拟它,但这不是本机razor数据绑定。看一看助手()的代码,你会发现他们正在执行你希望的工作。

你到底为什么不使用razor?使用
@Html.LabelFor()
@Html.TextBoxFor()
@Html.ValidationMessageFor()正确生成表单控件
-然后查看它生成的所有html,并将其与您的进行比较,这意味着您没有双向模型绑定,也没有验证,因为我与前端开发人员一起工作,他们为我创建了html。我想知道是否有一种使用输入类型的方法。如何绑定?使用
HtmlHelper
方法将为您提供双向模型绑定和验证所需的正确html。而且
@Model.Description
是razor代码,所以说你不想使用razor是没有意义的。你的解决方案是使用razor(这就是
@ViewData[“ValidationMessage”]
中的
@
所指的。是的,但OP也已经在使用一些简单的razor,比如“@Model.Description”和“@Model.ValueType”是的,我知道(正如我在对问题的评论中所指出的那样)。但是你的问题表明,如果你不想使用razor,那么就用razor展示一个解决方案:)我现在已经更正了它,称之为基于razor的表单方法。它是razor,但我喜欢用它来验证消息。我只想保留值。但问题是:如何保留值?
@model MyProject.Product

<h2>Create Product</h2>

<form method="post">
    <div class="error-message">@ViewData["ValidationMessage"]</div>
    Description: <br /> 
    <input type="text"  name="Description" id="Description" value="@Model.Description"/> <br />
    ValueType: <br />
    <input type="text" name="ValueType" id="ValueType" value="@Model.ValueType"/>
    <br />
    <input type="submit" name="btSend"/>

</form>