0

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

4

2 回答 2

0

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

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

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

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

于 2012-05-16T10:07:35.490 回答
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));
    }
于 2012-05-16T19:33:16.747 回答