ASP.Net MVC и jQuery DatePicker ViewModel

У меня есть DatePicker, работающий над представлением, с которым также связана ViewModel. Когда я выполняю действие Post обратно в контроллер, экземпляр ViewModel создается снова, и некоторые значения недоступны из представления.

Действие контроллера:

    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 в форме?

Большое спасибо Брайан


person Redeemed1    schedule 28.08.2009    source источник


Ответы (1)


Хорошо, здесь есть две проблемы:

  1. Я новичок в MVC и т. д., и я добавил расширения Telerik MVC в свой проект, и вы, ребята, jQuery будете знать, что приведенный выше код - это Telerik CTP. Извини за это.

  2. Вопрос в конце был довольно интересным. Приведенный выше код неправильно обрабатывал локализацию даты, так что даты, которые были введены в средстве выбора даты с локализацией браузера, установленной на НЕ-США английский, обрабатывались как формат США, поэтому, когда я выбрал 28/07/2009 (правильный формат en-UK ) либо оболочка Telerik для элемента управления datepicker не пропускала его, либо что-то в конвейере отклоняло его. В результате никакие даты после 12-го числа месяца не возвращались.

Я надеюсь, что это поможет кому-то еще на этом пути.

Брайан

person Redeemed1    schedule 28.08.2009