Tho*_*eil 2 c# asp.net asp.net-mvc razor asp.net-mvc-4
在MVC Form Post中使用隐藏字段时遇到问题.当通过HTML Helper生成隐藏字段时,它不会在回发期间保留它的值.但是当使用HTML标签时,它可以正常工作.
不幸的是,这个人花了我一整天的时间来完成这项工作.
这是我正在做的...(原谅任何拼写,重新输入的代码为SO):
查看模型
public class SomeViewModel
{
public int MyProperty1 { get; set; }
public int MyProperty2 { get; set; }
public int MyProperty3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
发布方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MyActionMethod(SomeViewModel someViewModel, string command)
{
...
...
// someViewModel.MyProperty1
...
...
}
Run Code Online (Sandbox Code Playgroud)
视图
@using (Html.BeginForm("MyActionMethod", "SomeController", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m => m.MyProperty1)
<div class="col-md-2">
<input type="hidden" value=@Model.MyProperty1 name="MyProperty1" />
<input type="submit" name="command" value="Button1" class="btn btn-primary" />
<input type="submit" name="command" value="Button2" class="btn btn-success" />
</div>
<div class="col-md-1"></div>
<div class="col-md-1">
<input type="submit" name="command" value="Button3" class="btn btn-danger" />
</div>
<div class="col-md-8"></div>
}
Run Code Online (Sandbox Code Playgroud)
在上面的视图的代码中,HTML辅助隐藏字段(@ Html.HiddenFor(M => m.MyProperty1))不NOT工作.但是HTML标记隐藏字段(INPUT TYPE = "隐藏" value=@Model.MyProperty1 NAME = "MyProperty1")DOES工作.我只启用了一个或另一个.这里显示的都是为了显示目的.
我更喜欢使用HTML Helper语法,但可以使用HTML标记.
注意事项:
View正在使用多个提交按钮.
视图使用局部视图.目前在局部视图中没有内容,也没有使用它.
我看不出这些会如何影响这个问题.以为我会提到它,以防万一.
问题:有谁可以解释为什么HTML Helper不起作用?
*****更新*****
感谢Stephen Muecke指出需要包含在我的问题中的内容.此外,还要感谢你猜测我实际在做什么,但我无法清楚地表达出来.
我正在更新ActionMethod()中的View Model属性,并且当重新呈现相同的View时,View Model属性不会反映新值.相反,它保留了它的初始值,而不是保留新值.
虽然不是很明显,但我发现很难找到很多关于这个主题的文章,以便在过去为我澄清它,ASP.NET MVC中的默认行为如下:
如果您正在使用HTML帮助程序并且您正在呈现相同的视图以响应POST
它,则假定您正在响应失败的表单验证.因此,在设置之前的值POST
将始终在ModelState的视图中呈现.
你有几个选择:
ModelState.Clear();
在你的帖子中.不推荐使用,因为框架没有这样设计.Post-Redirect-Get
模式并仅显示验证失败,因为框架是设计的(如@StephenMuecke提到的).Request.Form
值并删除SomeViewModel someViewModel
参数.不推荐这个,因为你失去了模型绑定的所有好处.ModelState.Remove
的特定字段中,再次不推荐.我在此发现的最好的文章是2010年Simon Ince的文章:
Rick Strahl的另一个:
ASP.NET MVC Postbacks和HtmlHelper控件忽略模型更改
归档时间: |
|
查看次数: |
3491 次 |
最近记录: |