0

List<int>C# と MVC を使用して、Jquery で行われた ajax 呼び出しに応答して、私が作成した といくつかの html コードを含むオブジェクトを応答として送信しようとしていますHtmlHelperExtension

以前は、html のみを返送していたのでHtmlHelper、部分ビューでレンダリングして返送していました。しかし、たとえば、リストとhtmlを表す文字列の2つの属性を持つオブジェクトを作成し、そのオブジェクトをJsonでシリアル化し、ajax呼び出しに応答して送り返したいと思います。

HtmlHelperしかし、ハックを使用することを除いて、コントローラーでa を使用することは不可能であり、推奨されていないようです。

また、htmlHelper のことを忘れて、html コードをクラスにレンダリングすることも考えていました。これは、現在のHtmlHelper.

List<int>から返された html をHtmlHelperオブジェクトに入れ、それをシリアライズして 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 に答える