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();
    }