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