3

asp.net mvc3では、

ユーザー インターフェイスを動的にレンダリングするために JavaScript API を使用しています。入力セクションの一部は、ユーザーがデータを入力したいアイテムの数に依存します。その結果、このようなものは機能しません

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

これは実行時に実行できないためです。AJAX での実行時にそのヘルパーを呼び出すには、どのような種類のプロセスを使用しますか? を使用して呼び出された情報のみを返すコントローラーアクションはあり$.ajax()ますか? コントローラーのアクションとは別の場所にあるのでしょうか?

4

3 に答える 3

3

実行時に、ビューを文字列としてレンダリングするコントローラ アクションに対して ajax get を実行し、それを 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);
    });
于 2012-05-24T22:09:21.393 に答える
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>
于 2012-05-25T05:11:14.980 に答える
0

私があなたを正しく理解していれば、クライアントにフィールドを動的に挿入して、ユーザーがフォームに無数の事前レンダリングされたフィールドを持たずに N 個のフィールドを追加できるようにしたいのですが、これを行うために ajax を使用しようとしていますか?

サーバー上でhtmlをレンダリングしてクライアントにプッシュすることで、それができると確信しています... JavaScriptを介してページに動的に追加することを検討しましたか? Web フォームとは異なり、MVC はページがレンダリングされたときにどの要素がページにあったかを気にせず、HttpPost で受け取るデータのみを気にします。

于 2012-05-24T22:05:52.523 に答える