Визуализация частичного просмотра кода скелета - PullRequest
0 голосов
/ 29 ноября 2011

У меня возникают трудности при рендеринге частичного представления с использованием бритвенного механизма MVC3.

Когда я выбираю ToDate, средство выбора даты jQuery UI будет ajax POST, отправляя строку JSON в качестве данных.

ControllerView.cshtml:

to_date ({
    onSelect: function (selectedDate, inst) {
       // Some code here to construct JSON
       $.ajax ({
           // Appropriate attributes
           url: 'Controller',
           data: '{ FromDate: "' + data.FromDate + '", ToDate: "' + data.ToDate + '" }'
       });
    }
});

<div id="picker">
                <label for="FromDate">From: </label>
                <input type="text" id="FromDate" />
                <label for="ToDate">To: </label>
                <input type="text" id="ToDate" />
</div> <!-- END picker -->
<div id="Day">
    <!-- ****Where partial view should be rendered**** -->
</div>

Это будет получено контроллером (Controller.cs):

[HttpPost]
public ActionResult Controller (DatePicker Dates)
{
    if (ModelState.IsValid)
    {
        // Save IList returned from query
        IList<Obj> JsonObj = Model.query(Dates);

        return PartialView("_PartialView", JsonObj);
    }
    return View();
 }

Какими должны быть мои следующие шаги?Я создал файл _PartialView.cshtml, но не смог отобразить представление.Кроме того, правильный ли мой подход, если я хочу, чтобы представление отображалось асинхронно?

Спасибо за помощь!

1 Ответ

1 голос
/ 29 ноября 2011

Просто добавьте функцию для запуска в случае успешного вызова ajax:

to_date ({
    onSelect: function (selectedDate, inst) {
       // Some code here to construct JSON
       $.ajax ({
           // Appropriate attributes
           url: 'Controller',
           data: '{ FromDate: "' + data.FromDate + '", 
                    ToDate: "' + data.ToDate + '" }'
           success: function (result) {
               // when the AJAX succeeds replace the Day tag with the new view
               $('#Day').html(result);
           }
       });
    }
});

Вероятно, вы также должны обрабатывать ошибки запроса, назначая функцию error:. См. jQuery.ajax () документацию для получения более подробной информации о success и error.

Небольшой совет - я очень рекомендую называть результат вашего действия чем-то другим, кроме Controller. Я не уверен, что вы получите состояние модели для этого вызова, так как это вызов AJAX, так что вы можете дважды проверить эту часть. Я бы также порекомендовал вам изменить результат действия, чтобы он принимал оба значения по имени. Примерно так:

[HttpPost]
public ActionResult RenderDatePartial(Date fromDate, Date toDate)
{
    var dates = new List<Date> { fromDate, toDate };

    // Save IList returned from query
    var jsonObj = Model.query(dates);

    return PartialView("_DatePartial", jsonObj);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...