Asp.net mvc 模型状态地狱-模型A如何可以同时是两个不同的东西?
我有这个Asp.net mvc 模型状态地狱-模型A如何可以同时是两个不同的东西?,asp.net-mvc,forms,browser,Asp.net Mvc,Forms,Browser,我有这个 <%=Model.StartDate%> <%=Html.Hidden("StartDate", Model.StartDate)%> 更新-完成操作 [Authorize] public ActionResult Program(string[] submit) { var viewModel = new ActivityProgramViewModel { UserID = LoggedInUser.UserID
<%=Model.StartDate%>
<%=Html.Hidden("StartDate", Model.StartDate)%>
更新-完成操作
[Authorize]
public ActionResult Program(string[] submit)
{
var viewModel = new ActivityProgramViewModel { UserID = LoggedInUser.UserID };
viewModel.Fresh = true;
TryUpdateModel(viewModel);
var pagingService = new OccurencePagingService(LoggedInUser.AllActivities.Where(a => a.StartTime != null));
if (!viewModel.Fresh)
{
pagingService.StartDate = ((DateTimeOffset)viewModel.StartDate);
pagingService.EndDate = ((DateTimeOffset)viewModel.EndDate);
}
if (submit != null)
if (submit.Contains("MoveBack"))
pagingService.MoveBack();
else if (submit.Contains("MoveForward"))
pagingService.MoveForward();
ViewData.Model = viewModel;
viewModel.Occurrences = pagingService.GetOccurences();
viewModel.Fresh = false;
viewModel.HasLess = pagingService.HasLess;
viewModel.HasMore = pagingService.HasMore;
viewModel.StartDate = pagingService.StartDate;
viewModel.EndDate = pagingService.EndDate;
return View();
}
第一个使用模型对象,第二个使用现有的ModelState。在生成视图之前查看ModelState值。它可能保存此字段的值。MVC授权的Html帮助程序使用ModelState生成表单字段。它有助于在回发后重新创建值
要解决这类问题,请使用POST-REDIRECT-get模式或通过get传递查询参数。第一个使用模型对象,第二个使用现有的ModelState。在生成视图之前查看ModelState值。它可能保存此字段的值。MVC授权的Html帮助程序使用ModelState生成表单字段。它有助于在回发后重新创建值 要解决这类问题,请使用POST-REDIRECT-get模式,或者通过get传递查询参数。我认为这是不合适的 Html助手试图通过检查post/route数据,将数据保存在UI中,就像他们输入的位置一样。请不要问我有人会如何在隐藏字段中输入数据 您需要一些不同的东西:您希望将数据设置为Model.StartDate,而不关心post/route中的内容 我会使用
我觉得这个地方不合适
Html助手试图通过检查post/route数据,将数据保存在UI中,就像他们输入的位置一样。请不要问我有人会如何在隐藏字段中输入数据
您需要一些不同的东西:您希望将数据设置为Model.StartDate,而不关心post/route中的内容
我会使用
很明显,我遗漏了一些东西。ModelState[“StartDate”]保存要放入隐藏元素的值,即我不想要的值。那你要我怎么做?我很惊讶,因为我做这种事情已经有一段时间了,我看不出我在这个视图上做了什么不同。@Martin:你为什么要发布这个隐藏的值?如果您必须发布此值,请使用重定向并只传递必要的值。您是对的,我不知道。更改了获取的方法,但没有任何区别。PRG模式似乎有点过头了。我只是在传呼。只有viewmodel正在更新。您是如何更改它的?你能给我们看一下你的一些代码和你在get请求中发送的内容吗?我显然遗漏了一些东西。ModelState[“StartDate”]保存要放入隐藏元素的值,即我不想要的值。那你要我怎么做?我很惊讶,因为我做这种事情已经有一段时间了,我看不出我在这个视图上做了什么不同。@Martin:你为什么要发布这个隐藏的值?如果您必须发布此值,请使用重定向并只传递必要的值。您是对的,我不知道。更改了获取的方法,但没有任何区别。PRG模式似乎有点过头了。我只是在传呼。只有viewmodel正在更新。您是如何更改它的?你能给我们看看你的一些代码和你在get请求中发送的内容吗?正确日期是什么:2010-05-11或2010-03-17?请再给我们看一些代码:)你不知怎么发送了StartDate。pagingService.StartDate来自哪里?没关系,我可以写任何东西。解析(“2010-01-01”)为什么不。但是分页服务从viewmodel after和updateModel调用中获取它的初始值。但是我可以从请求中得到它们,这没什么区别。正确的日期是:2010-05-11还是2010-03-17?请再给我们一些代码:)你不知怎么发送了StartDate。pagingService.StartDate来自哪里?没关系,我可以写任何东西。解析(“2010-01-01”)为什么不。但是分页服务从viewmodel after和updateModel调用中获取它的初始值。但是我可以从请求中得到它们,这没有什么区别。这就是我目前正在做的。我认为这是一个骗局。但这就是我目前正在做的。我认为这是一个骗局。但你来了。
using (Html.BeginForm("Program", "Activities", null, FormMethod.Get, new { @name = "ProgramForm", id = "ProgramForm" }))
{
viewModel.StartDate = pagingService.StartDate;
return View(viewModel);
[Authorize]
public ActionResult Program(string[] submit)
{
var viewModel = new ActivityProgramViewModel { UserID = LoggedInUser.UserID };
viewModel.Fresh = true;
TryUpdateModel(viewModel);
var pagingService = new OccurencePagingService(LoggedInUser.AllActivities.Where(a => a.StartTime != null));
if (!viewModel.Fresh)
{
pagingService.StartDate = ((DateTimeOffset)viewModel.StartDate);
pagingService.EndDate = ((DateTimeOffset)viewModel.EndDate);
}
if (submit != null)
if (submit.Contains("MoveBack"))
pagingService.MoveBack();
else if (submit.Contains("MoveForward"))
pagingService.MoveForward();
ViewData.Model = viewModel;
viewModel.Occurrences = pagingService.GetOccurences();
viewModel.Fresh = false;
viewModel.HasLess = pagingService.HasLess;
viewModel.HasMore = pagingService.HasMore;
viewModel.StartDate = pagingService.StartDate;
viewModel.EndDate = pagingService.EndDate;
return View();
}