是否可以使用AJAX访问html助手?

时间:2012-05-24 21:51:24

标签: asp.net-mvc-3 razor helper

在asp.net mvc3中,

我正在使用javascript API动态呈现用户界面。输入部分的一部分将取决于用户想要输入数据的项目数。结果,像这样的东西不会起作用

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

因为在运行时无法完成。我将使用什么类型的进程在运行时使用AJAX调用该帮助程序?我是否会有一个控制器操作,它只返回使用$.ajax()调用的信息?它会在与控制器动作不同的地方吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

如果要提取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>

答案 2 :(得分:0)

如果我理解正确,您希望在客户端上动态插入字段,以允许用户添加N个字段而不在表单上有大量预渲染字段,并且您尝试使用ajax来执行此操作?

我确信你可以通过在服务器上渲染html并将其推送到客户端来实现它...你考虑通过javascript动态添加到页面吗?与Webforms不同,MVC不关心页面在呈现时是什么元素,它只关心它在HttpPost中接收的数据。