C# 使用@Html.HiddenFor呈现隐藏表单字段 公共类搜索表单{ //注意:属性可为空 公共日期时间?CurrentViewDate{get;set;} 公共日期时间起始日期{get;set;} } //在控制器中 //[获取] 公共行动结果索引() { } //[张贴] 公共行动结果索引(SearchForm formModel) { 如果(formModel.CurrentViewDate==null) formModel.CurrentViewDate=DateTime.Now.AddDays(1d); 其他的 formModel.CurrentViewDate=formModel.CurrentViewDate.AddDays(1d); formModel.StartDate=DateTime.Now; } //鉴于 @Html.HiddenFor(c=>c.CurrentViewDate)。
但是,当我单击submit时,值确实会增加,但hidden for字段会保留上一个值,并且它显示正确值的唯一方式是 如果在@Html.HiddenFor(c=>c.CurrentViewDate.Value)上执行此操作,则 重新发布formModel.CurrentViewDate具有空值,因为绑定名称不同C# 使用@Html.HiddenFor呈现隐藏表单字段 公共类搜索表单{ //注意:属性可为空 公共日期时间?CurrentViewDate{get;set;} 公共日期时间起始日期{get;set;} } //在控制器中 //[获取] 公共行动结果索引() { } //[张贴] 公共行动结果索引(SearchForm formModel) { 如果(formModel.CurrentViewDate==null) formModel.CurrentViewDate=DateTime.Now.AddDays(1d); 其他的 formModel.CurrentViewDate=formModel.CurrentViewDate.AddDays(1d); formModel.StartDate=DateTime.Now; } //鉴于 @Html.HiddenFor(c=>c.CurrentViewDate)。,c#,asp.net-mvc-3,nullable,datetime-format,C#,Asp.net Mvc 3,Nullable,Datetime Format,但是,当我单击submit时,值确实会增加,但hidden for字段会保留上一个值,并且它显示正确值的唯一方式是 如果在@Html.HiddenFor(c=>c.CurrentViewDate.Value)上执行此操作,则 重新发布formModel.CurrentViewDate具有空值,因为绑定名称不同 有什么想法吗?感觉它从StartDate属性而不是CurrentViewDate属性中获取日期时间值如果要修改它,需要从ModelState中删除该值: public class Sear
有什么想法吗?感觉它从StartDate属性而不是CurrentViewDate属性中获取日期时间值如果要修改它,需要从ModelState中删除该值:
public class SearchForm {
//Note: Property is nullable
public DateTime? CurrentViewDate {get;set;}
public DateTime StartDate {get;set;}
}
//In the controller
//[GET]
public ActionResult Index()
{
}
//[POST]
public ActionResult Index(SearchForm formModel)
{
if(formModel.CurrentViewDate == null)
formModel.CurrentViewDate = DateTime.Now.AddDays(1d);
else
formModel.CurrentViewDate = formModel.CurrentViewDate.AddDays(1d);
formModel.StartDate = DateTime.Now;
}
//In view
@Html.HiddenFor(c => c.CurrentViewDate).
<input id="SearchForm_CurrentViewDate" name="SearchForm.CurrentViewDate"
type="hidden" value="5/25/2012 11:59:59 PM" />
<input type="submit" name="btnNext" id="btnNext" value="Go Increment" />
您需要这样做的原因是因为所有Html帮助程序,如TextBoxFor、HiddenFor、CheckBoxFor。。。绑定其值时,首先查看ModelState,然后查看模型。这种行为是故意的。因此,因为在您的POST操作中,ModelState(与请求一起发送的)中已经有一个值,所以正在使用的就是这个值
每次尝试在POST controller操作中修改视图模型上的某些属性,并期望此更改反映在值中时,不要忘记ModelState
public ActionResult Index(SearchForm formModel)
{
ModelState.Remove("CurrentViewDate");
if(formModel.CurrentViewDate == null)
{
formModel.CurrentViewDate = DateTime.Now.AddDays(1d);
}
else
{
formModel.CurrentViewDate = formModel.CurrentViewDate.AddDays(1d);
}
return View(model);
}