是否有可能使用AJAX来访问HTML帮助?(Is it possible to use AJAX t

2019-09-17 12:16发布

在asp.net MVC3,

我使用JavaScript API来动态呈现的用户界面。 输入部分的部分将是依赖于用户有多少项目要为输入数据。 其结果是,这样的事情不会工作

@(Html.EditorFor(m => m.P[5].C.Description))

因为不能在运行过程中完成。 什么类型的过程,我会用与AJAX运行时调用该助手? 我想有一个控制器动作只返回这是使用所谓的信息$.ajax() 难道是在不同的地方比一个控制器的动作?

Answer 1:

在运行时,你可以执行一个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);
    });


Answer 2:

如果你拉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>


Answer 3:

如果我理解正确的话,要动态插入客户端领域,允许用户添加字段的N个不具有窗体上的bazillion预渲染领域,你要使用AJAX来做到这一点?

我相信你可以做到这一点,通过渲染服务器上的HTML,将其推到客户端...你考虑动态通过JavaScript添加到页面? 不同于Web表单,MVC并不关心是页面上的什么元素,当它被渲染,它只是关心它接收在HttpPost数据。



文章来源: Is it possible to use AJAX to access an html helper?