0

使用 C# 和 MVC,为了响应使用 Jquery 进行的 ajax 调用,我尝试发送一个包含 aList<int>和一些 html 代码的对象作为响应,该对象由HtmlHelperExtension我编写的 a 生成。

以前,我只发回 html,所以我HtmlHelper在局部视图中渲染并返回它。但现在我想,例如,创建一个具有 2 个属性、列表和表示 html 的字符串的对象,在 Json 中序列化该对象并将其发送回以响应 ajax 调用。

但似乎除了使用hack之外,是不可能的,也不建议HtmlHelper在Controller中使用a。

我还想忘记 htmlHelper 的事情,而只是在一个类中呈现我的 html 代码,这将是我当前HtmlHelper.

您是否认为有一种方法可以将 a 放在List<int>Controller 中,从 a 返回的 htmlHtmlHelper放在一个对象中并将其序列化以将其发送回 javascript 中的 ajax 调用?

谢谢!

4

1 回答 1

1

MVC 本身并不支持对字符串的视图,它只是简单地返回它。但是,您可以使用允许这样做的方法创建自定义控制器。我在某个地方的互联网上找到了这段代码——不记得在哪里——它做得很好。

public class ExtendedController : Controller
{
    public string RenderPartialView(string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = this.ControllerContext.RouteData.GetRequiredString("action");

        this.ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(this.ControllerContext, viewName);
            var viewContext = new ViewContext(this.ControllerContext, viewResult.View, this.ViewData, this.TempData, sw);
            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
    }
}

然后将控制器创建为

public class MyController : ExtendedController
{
    public ActionResult MyAjaxOp()
    {
        List<int> MyList = new List<int>(); // Populate the list as required
        object MyHelperModel = new object(); // View Model as required
        object rtn = new { html = RenderPartialView("MyHelperView", MyHelperModel), list = MyList}
        return Json(rtn, JsonRequestBehavior.AllowGet);
    }
}

这将允许您将呈现的视图放入字符串并将其传递给客户端。

以上是未经测试的示例代码,请根据您的要求进行修改。

于 2012-11-23T10:20:57.217 回答