Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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/search/2.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# BeginForm生成一个id为的表单操作_C#_.net_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

C# BeginForm生成一个id为的表单操作

C# BeginForm生成一个id为的表单操作,c#,.net,asp.net-mvc,asp.net-mvc-4,razor,C#,.net,Asp.net Mvc,Asp.net Mvc 4,Razor,此代码: @using (Html.BeginForm("Rename", "Board", FormMethod.Post)) { @Html.LabelFor(x => x.Name); @Html.EditorFor(x => x.Name); @Html.HiddenFor(x => x.Id); <br/> <input type="submit" value="@Labels.Submit"> } 当

此代码:

@using (Html.BeginForm("Rename", "Board", FormMethod.Post))
{
    @Html.LabelFor(x => x.Name);
    @Html.EditorFor(x => x.Name);
    @Html.HiddenFor(x => x.Id);
    <br/>
    <input type="submit" value="@Labels.Submit">
}
当我尝试提交MVC投诉表时:

System.ArgumentException:参数字典包含空值 不可为空的类型为“System.Int32”的参数“id”的条目,用于 方法'System.Web.Mvc.ActionResult板(Int32)

我猜这是因为生成的操作url的最后一部分(“/Board/Rename/43”)


正确的方法是什么?

您是正确的,表单的URL生成将为您处理路由。也就是说,您实际上可以删除Html.BeginForm()参数和ID的隐藏值

@using (Html.BeginForm())
{
    @Html.LabelFor(x => x.Name);
    @Html.EditorFor(x => x.Name);
    <br/>
    <input type="submit" value="@Labels.Submit">
}
@使用(Html.BeginForm())
{
@LabelFor(x=>x.Name);
@EditorFor(x=>x.Name);

}
这实际上仍然会生成与您现在拥有的相同的URL来发布:

<form action="/Board/Rename/43" method="post">


至于为什么您会失败,我怀疑model binder会与URL中的ID参数以及表单中的ID参数混淆。至于“正确的方法”,通常除非我需要给表单一个Id(或类)或需要发布到不同的操作方法,否则我使用上面所示的基本构造函数。这有一个很好的效果,即能够在多个位置重用此表单来自的View(),而无需在ViewModel中传递控制器、操作集和值

该死,那很容易。。。谢谢你必须再等7分钟才能得到“接受”:)没问题——我现在正在做一个项目重写,表单重用真是天赐良机!
@using (Html.BeginForm())
{
    @Html.LabelFor(x => x.Name);
    @Html.EditorFor(x => x.Name);
    <br/>
    <input type="submit" value="@Labels.Submit">
}
<form action="/Board/Rename/43" method="post">