在asp.net MVC3,
我使用JavaScript API来动态呈现的用户界面。 输入部分的部分将是依赖于用户有多少项目要为输入数据。 其结果是,这样的事情不会工作
@(Html.EditorFor(m => m.P[5].C.Description))
因为不能在运行过程中完成。 什么类型的过程,我会用与AJAX运行时调用该助手? 我想有一个控制器动作只返回这是使用所谓的信息$.ajax()
难道是在不同的地方比一个控制器的动作?
在asp.net MVC3,
我使用JavaScript API来动态呈现的用户界面。 输入部分的部分将是依赖于用户有多少项目要为输入数据。 其结果是,这样的事情不会工作
@(Html.EditorFor(m => m.P[5].C.Description))
因为不能在运行过程中完成。 什么类型的过程,我会用与AJAX运行时调用该助手? 我想有一个控制器动作只返回这是使用所谓的信息$.ajax()
难道是在不同的地方比一个控制器的动作?
在运行时,你可以执行一个AJAX到一个控制器动作,将呈现一个视图作为字符串,这反过来又可以被插入/追加到DOM。
创建一个新的动作结果返回JSON按如下:
return new JsonResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { html = this.RenderPartialViewToString("YourPartialView", model) }
};
请注意,上述利用以下控制器扩展的:
public static string RenderPartialViewToString(this Controller controller, string viewName = null, object model = null)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
}
controller.ViewData.Model = model;
using (var sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
有关此扩展方法进一步阅读: http://craftycodeblog.com/2010/05/15/asp-net-mvc-render-partial-view-to-string/
所有这一切仍将会是为执行GET传递参数标志着项目的数量呈现和追加返回的内容到你的观点。 也许是这样的:
$.getJSON('url', numberofitems, function (data) {
$('#somecontainer').html(data.html);
});
如果你拉HTML,并将其插入到DOM,你不必通过JSON去。 只要有你的行动返回一个PartialView。 它已经以HTML的形式,并准备被插入到你的DOM
JS
$.getJSON('/someurl/GetMyView',{count:10}, function (data) {
$('#target').html(data);
});
控制器:
[HttpGet]
public ActionResult GetMyView(int count)
{
MyModel model = //Get the model from somewhere
return PartialView(model);
}
视图:
@model MyModel
<div>
@Model.SomeProperty
<div>
如果我理解正确的话,要动态插入客户端领域,允许用户添加字段的N个不具有窗体上的bazillion预渲染领域,你要使用AJAX来做到这一点?
我相信你可以做到这一点,通过渲染服务器上的HTML,将其推到客户端...你考虑动态通过JavaScript添加到页面? 不同于Web表单,MVC并不关心是页面上的什么元素,当它被渲染,它只是关心它接收在HttpPost数据。