将DatePicker值传递给Controller和Views

时间:2012-05-16 09:52:21

标签: jquery asp.net-mvc model-view-controller jquery-ui-datepicker

我有一个带有datepicker控件的视图和页面上的几个部分视图。默认情况下,日期在控制器的ViewData中设置为今天的日期,用于显示页面加载的时间。当用户更改日期选择器中的日期时,如何将选定的值从Jquery变量传递给Controller的ViewData并更新所有部分视图?

2 个答案:

答案 0 :(得分:0)

日期选择器控件只是一个HTML元素,它有一些关联的javascript来帮助用户选择日期。它完全是客户端,这意味着它在浏览器上运行(例如IE,Firefox,Chrome)。 ViewData是一个临时存储,可以由控制器操作中的服务器端代码(例如C#)填充,然后在视图中用于生成将发送到客户端浏览器的HTML响应。因此,您无法将jQuery变量传递给ViewData,它只是没有意义。

如果您想更新部分生成的页面部分,您有几个选择。

(a)进行回发,将日期时间传递回控制器操作并刷新整个页面(非常简单,但可能无法提供良好的用户体验,具体取决于您的操作)。

(b)使用Ajax更新您想要的页面部分(更多涉及但可以提供更好的用户体验)。

答案 1 :(得分:0)

@Tony,谢谢你的回复。我把它以错误的方式放在我想将jquery变量传递给viewdata,我的意思是基于jquery变量(datepicker选择的值),我必须重新加载部分视图。 我必须在Ajax中这样做,这是我遵循的程序 在Javascript中:

    $(function () {
        $('#datePickerID').datepicker({
        onSelect: function (dateText, inst) {
        $.post('<%=Url.Action("GetControllerActionResult","ControllerName") %>',
        { parameter1: dateText },
        function (rawdata) {
        var data = $.parseJSON(rawdata);
$('htmlID or className of your partial view').html(data.dataString); //rendering your partial view
}
        );
}
        });;

在控制器中:

 public ActionResult GetControllerActionResult(dataType parameter1) {
    ViewData["someValue"] = parameter1;
    ViewData["yourPartialViewObject"] = perform some action...

    var data = new Dictionary<string, object>();
    data.Add("dataString", this.RenderViewToString("partialViewName", ViewData["yourPartialViewObject"]));
    return Content(GetJSONString(data));
    }