代码之家  ›  专栏  ›  技术社区  ›  Martin

模型状态推断-模型A如何同时是两个不同的东西?

  •  0
  • Martin  · 技术社区  · 15 年前

    我有这个

    <%=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"> 
    

    什么…

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

    我需要做什么?

    使用火狐。

    更新-更多代码

    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 回复  |  直到 15 年前
        1
  •  0
  •   Mathias F    15 年前

    我认为<%=html.hidden(“startdate”,model.startdate)%>在这里不合适。

    HTML帮助程序试图在用户界面中保存数据,就像通过检查post/route数据输入的数据一样。请不要问我有人会如何在隐藏字段中输入数据。

    你想要一些不同的东西:你想把数据设置为model.startdate,而不关心在post/route中是什么。

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

        2
  •  4
  •   LukLed    15 年前

    第一个使用模型对象,第二个使用现有的模型状态。在生成视图之前查看ModelState值。它可以很好地保存这个字段的值。MVC授权的HTML助手使用ModelState生成表单字段。它有助于在回发后重新创建值。

    为了解决这类问题,可以使用后重定向获取模式,或者只通过get传递查询参数。