C# MVC4-动态渲染视图上的表单数据和刷新

C# MVC4-动态渲染视图上的表单数据和刷新,c#,asp.net-mvc,razor,asp.net-mvc-4,C#,Asp.net Mvc,Razor,Asp.net Mvc 4,一直致力于创建一个界面,以允许用户界面的模块化方法,背景: 允许用户将模块拖放到div上 jQUery使用模块和面板名称发回控制器 控制器返回一个JsonResult,其中包含特定于该模块的已呈现视图 以下是UI的图片,您可以大致了解我在做什么: 现在,我要做的是,JsonResult(它包含视图渲染的字符串输出)将一些数据保存回模型,并刷新动态渲染的视图,以便只更新面板(视图已渲染的地方) 听起来很复杂,我知道,这里有一些代码: [AcceptVerbs(HttpVerbs.Post)]

一直致力于创建一个界面,以允许用户界面的模块化方法,背景:

允许用户将模块拖放到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" />                                                                                                                                                           

    }
}

(不起作用)

像这样的东西会对你有帮助

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

在这里附加ajax请求后的验证

请重新标记,这不是asp classic,而是asp.net。我可以通过使用jQuery将模型值和模型ID发布回控制器,然后在JSON结果中重新呈现视图来解决这个问题,如果没有更精简的方法,谢谢,这似乎是我想走的方向,非常感谢,很高兴看到另一个条目也有一些方法
public ActionResult RefreshModule(string ModuleID)
    {
        return View();
    }