1

我有一个 DatePicker 在一个 View 上工作,它也有一个与之关联的 ViewModel。当我将 Post 操作执行回控制器时,ViewModel 会再次实例化,并且某些值在 View 中不可用。

控制器动作是:

    public ActionResult Search()
    {
        ProjectSearchViewModel viewModel = 
            new ProjectSearchViewModel(
                DateTime.Today.AddMonths(-1), 
                DateTime.Today.AddDays(1));

        return View(viewModel);
    }

  [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Search(ProjectSearchViewModel viewModel)
    {
        try
        {
            //Always returns a value from UI
            DateTime startDate = viewModel.StartDate; 
            //NEVER returns a Value from UI
            DateTime endDate = viewModel.EndDate; 

......

视图标记是:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/TabbedViewMasterPage.master" Inherits="System.Web.Mvc.ViewPage<Reactivity.Web.Models.ProjectSearchViewModel>"%>

...

 <label for="StartDate">
        Start Date:
    </label>
    <% Html.jQuery().DatePicker()
            .Name("StartDate")
            .AllowMonthChange(true)
            .AllowYearChange(true)
            .ShowOn(DatePickerShowOn.Focus)
            .ShowOtherMonths(true)
            .Value(ViewData.Model.StartDate)
            .Render(); %>
    <br />
    <label for="EndDate">
        End Date:
    </label>
    <% Html.jQuery().DatePicker()
            .Name("EndDate")
            .AllowMonthChange(true)
            .AllowYearChange(true)
            .ShowOn(DatePickerShowOn.Focus)
            .ShowOtherMonths(true)
            .Value(ViewData.Model.EndDate)
            .Render(); %>
    <br />
    <input type="submit" value="Search" />

DatePicker(视图上的两个实例)工作正常。

如何确保 ViewModel 字段 (viewModel.EndDate) 返回填充到控制器操作?或者这是表单上有两个(MVC)DatePickers 的问题吗?

非常感谢布赖恩

4

1 回答 1

1

好的,这里有两个问题:

  1. 我是 MVC 等的新手,并且已经将 Telerik MVC Extensions 放入我的项目中,对于你们 jQuery 的人来说,上面的代码是 Telerik CTP。对于那个很抱歉。

  2. 最后的问题比较有趣。上面的代码没有正确处理日期本地化,因此在浏览器本地化设置为非美国英语的日期选择器中输入的日期被处理为美国格式,因此当我选择 28/07/2009(正确的 en-UK 格​​式) 日期选择器控件的 Telerik 包装器不会通过它,或者管道中的某些东西拒绝它。结果是没有返回该月 12 日之后的任何日期。

我希望这可以帮助其他人。

布赖恩

于 2009-08-28T18:41:20.687 回答