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

类似的东西将帮助您 将 Ajax.BeginForm 与 A​​SP.NET MVC 3 Razor 一起使用

只需使用 Ajax.BeginForm 并提供替换元素的 id。

在此处附加 ajax 请求后的 验证 MVC3 Unobtrusive Validation Not Working after Ajax Call

于 2013-03-07T13:18:56.597 回答