c# - 在操作结果中将 EditorTemplate 作为 PartialView 返回

标签 c# asp.net-mvc-2 partial-views editortemplates

我有一个类似这样的模型:

public class myModel 
{
    public ClassA ObjectA {get; set;}
    public ClassB ObjectB {get; set;}
}

在我的主视图中,我有类似这样的标签:

<div id="section1">
    <%=Html.EditorFor(m => m.ObjectA)%>
</div>
<div id="section2">
    <%=Html.EditorFor(m => m.ObjectB)%>
</div>

ClassA 和 ClassB 都定义了编辑器模板。

我创建了一些 JavaScript 来进行 Ajax 调用以重新加载 section1 div。我希望操作方法返回 ObjectA 的编辑器,即 EditorTemplates 文件夹中的 ClassA.ascx。

我的 Action 方法中有以下内容:

public ActionResult GetData(int input) 
{
    // Process input here and create modelData

    return PartialView("ClassA", modelData);
}

这会出错,因为它找不到 ClassA View 。

我的解决方案是在名为“GetData”的 Views 文件夹中创建一个 PartialView,我的返回呈现 GetData View 。 GetData View 只有一行代码:

<%=Html.RenderForModel()%>

这确实有效,但我想知道是否有一种方法可以让操作方法返回和编辑器模板?

最佳答案

礼品包装的奖励积分:

public class CustomControllerBase : Controller
{
    public PartialViewResult EditorFor<TModel>(TModel model)
    {
        return PartialView("EditorTemplates/" + typeof(TModel).Name, model);
    }

    public PartialViewResult DisplayFor<TModel>(TModel model)
    {
        return PartialView("DisplayTemplates/" + typeof(TModel).Name, model);
    }
}

让 Controller (称为 MyController)继承自 CustomControllerBase,然后:

public ActionResult MyAction(int id)
{
    return EditorFor(new MyViewModel(id));
}

代码将查找“~/Views/MyController/EditorTemplates/MyViewModel.ascx”。

关于c# - 在操作结果中将 EditorTemplate 作为 PartialView 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2374046/

相关文章:

c# - 如何在 C# 中使用 TPL 任务将工作编码到主线程上而不导致死锁?

html - 单选按钮生成重复的 HTML id-s

jquery - 具有自动刷新功能的 MVC 部分 View

javascript - jQuery Html 加载剥离 <form> 标签

c# - ASP.NET 中的 die() 或 exit() 功能

c# - 删除不触发 Dynamics CRM 的消息插件

c# - : Union of several similar lists, 和 Distinct 在有很多重复项的大列表中哪个性能更好?

nhibernate - ASP.NET MVC 2 RC 模型与 NHibernate 和下拉列表绑定(bind)

c# - MVC 模型绑定(bind)到接口(interface)

c# - JQuery .html() 函数似乎在 IE 中不必要地缓存