C# 如何使用从HtmlHelper生成的序列化对象和html向ajax调用发送json响应

C# 如何使用从HtmlHelper生成的序列化对象和html向ajax调用发送json响应,c#,html,ajax,json,html-helper,C#,Html,Ajax,Json,Html Helper,有了C#和MVC,为了响应Jquery发出的ajax调用,我尝试发送一个对象作为响应,该对象将包含一个列表和一些html代码,这些代码是由我编写的HtmlHelperExtension生成的 以前,我只发送回html,所以我在部分视图中呈现HtmlHelper,并返回它。但是现在我想创建一个具有两个属性的对象,列表和一个表示html的字符串,用Json序列化该对象,并将其发送回ajax调用 但是,除了使用黑客之外,似乎不可能,也不建议在控制器中使用HtmlHelper 我还想忘记htmlHelp

有了C#和MVC,为了响应Jquery发出的ajax调用,我尝试发送一个对象作为响应,该对象将包含一个
列表和一些html代码,这些代码是由我编写的
HtmlHelperExtension
生成的

以前,我只发送回html,所以我在部分视图中呈现
HtmlHelper
,并返回它。但是现在我想创建一个具有两个属性的对象,列表和一个表示html的字符串,用Json序列化该对象,并将其发送回ajax调用

但是,除了使用黑客之外,似乎不可能,也不建议在控制器中使用
HtmlHelper

我还想忘记htmlHelper的东西,只是在一个类中呈现我的html代码,这个类将是我当前的
htmlHelper
的精确副本

您认为有没有一种方法可以将控制器中的
列表
和从
HtmlHelper
返回的html放在一个对象中,并将其序列化以将其发送回javascript中的ajax调用


谢谢

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);
    }
}
公共类MyController:ExtendedController
{
公共行动结果MyAjaxOp()
{
List MyList=new List();//根据需要填充列表
对象MyHelperModel=新对象();//根据需要查看模型
对象rtn=new{html=RenderPartialView(“MyHelperView”,MyHelperModel),list=MyList}
返回Json(rtn,JsonRequestBehavior.AllowGet);
}
}
这将允许您将渲染视图放置到字符串中,并将其传递给客户端

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