0

UI へのモジュラー アプローチを可能にするインターフェイスの作成に取り組んでいます。背景は次のとおりです。

ユーザーがモジュールを div にドラッグ アンド ドロップできるようにする jQuery がモジュール名とパネル名を付けてコントローラーにポストバックする コントローラーは、そのモジュールに固有の、レンダリングされたビューを含む JsonResult を返す

ここにUIの写真があるので、私が何をしているのかを見ることができます:

画像

今、私がやろうとしているのは、その JsonResult (ビュー レンダリングの文字列出力を含む) であり、一部のデータをモデルに保存し、動的にレンダリングされたビューを更新して、パネル (ビューの場所)レンダリングされています) 更新。

私が知っている複雑に聞こえるので、ここにいくつかのコードがあります:

 [AcceptVerbs(HttpVerbs.Post)]
    public JsonResult AddModule(string id, string returnTo)
    {
        string content = RenderView(id);
        return Json(new { Target = returnTo, Content = content });
    }
    private string RenderView(string moduleName)
    {
        string result = "";

        ContentModule module = (ContentModule)Activator.CreateInstance(Type.GetType("TrustMRM.BLL.ContentModules." + moduleName + ",TrustMRM.BLL"));
        module.TrustID = Settings.Default.TrustID;
        module.DataBind();
        this.ViewData.Model = module;

        using (var sw = new System.IO.StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(this.ControllerContext, moduleName);
            var viewContext = new ViewContext(this.ControllerContext, viewResult.View, this.ViewData, this.TempData, sw);
            viewResult.View.Render(viewContext, sw);
            result = sw.GetStringBuilder().ToString();
        }
        return result;
    }

上記は、モジュールの「ドロップ」を処理するものです。抽象クラス ContentModule と、BLLForumModule という実装があります。一致するビュー BLLForumModule.cshtml があり、ビルドされてその文字列に返され、BLLForumModule に強くバインドされます。

レンダリングされるのは、その特定のモジュールを構成するためのデータに等しいドロップダウン リストです。

@model TrustMRM.BLL.ContentModules.BLLForumModule
@{

Layout = null;
}

@if (Model.IsConfigured)
{ 
    <span>I am configured</span>
}
else
{
using (Html.BeginForm("RefreshModule", "Home"))
{
    <h3 class="panelHeader">@Html.DisplayTextFor(m => m.Title)</h3>
    <span>Select group</span>
    @Html.DropDownListFor(m => m.SelectedGroupID, Model.GroupSelection.Select(t => new SelectListItem { Text = t.GroupName, Value = t.GroupID.Value.ToString() }));
    @Html.HiddenFor(x => x.ModuleID);                                                                                                                     
    <input type="submit" value="Ok" />                                                                                                                                                           

    }
}

さて、何を返すか、またはそのビューを更新するためにこの投稿を処理する方法、文字列としてレンダリングされて送り返されたもの、これに関する洞察、そして誰かが以前に同様のことをしたことがあるなら、おそらくビューを文字列にレンダリングするのは間違ったアプローチですか?

フォーム投稿を受け入れるコード:

public ActionResult RefreshModule(string ModuleID)
    {
        return View();
    }

(動作しません)

4

1 に答える 1

1

ASP.NET MVC 3 Razor での Ajax.BeginForm の使用

Ajax.BeginForm を使用して、置き換えられた要素の ID を指定するだけです。

ここに ajax リクエストの後に検証を 添付する Ajax 呼び出し後に MVC3 控えめな検証が機能しない

于 2013-03-07T13:18:56.597 に答える