模型状态inferno - Model.A如何同时成为两个不同的东西?

时间:2010-04-08 10:01:49

标签: asp.net-mvc forms browser

我有这个

<%=Model.StartDate%>
<%=Html.Hidden("StartDate", Model.StartDate)%>

输出:

 2010-05-11 11:00:00 +01:00      
 <input type="hidden" value="2010-03-17 11:00:00 +01:00" name="StartDate" id="StartDate"> 

什么......

这是一种分页机制,因此隐藏值在第一页上有效,我已经能够前进到下一页。但由于这些值不能正确更新,因此它就会结束。

我需要做什么?

使用firefox。

更新 - 更多代码

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

2 个答案:

答案 0 :(得分:4)

第一个使用Model对象,第二个使用现有的ModelState。在生成视图之前查看ModelState值。它可以为这个领域带来价值。 MVC授予的Html帮助程序使用ModelState生成表单字段。它有助于在回发后重新创建值。

要解决此类问题,请使用POST-REDIRECT-GET模式或仅通过GET传递查询参数。

答案 1 :(得分:0)

我认为&lt;%= Html.Hidden(“StartDate”,Model.StartDate)%&gt;在这里不合适。

Html Helpers尝试通过检查发布/路由数据将数据保存在UI中,就像输入的那样。请不要问我有人会如何在隐藏的字段中输入数据。

你想要一些不同的东西:你想把数据设置为Model.StartDate而不关心帖子/路线中的内容。

我会使用<input value="<%=Model.StartDate%>" name="StartDate" />