1

伙计们,

环境:ASP .NET MVC 4

在我需要构建的视图中,需要有两个部分。顶部显示了一个表格。根据用户选择的行,我需要在底部呈现适当的用户界面。本质上,它是一个主从视图,除了详细信息中的控件会根据主部分中的选定行而变化。

我猜我需要创建与每种详细信息类型相对应的部分视图,并以某种方式以编程方式显示正确的视图。

如果有人能告诉我正确的方法是什么,我将不胜感激。任何示例代码或现有示例的链接都将受到高度赞赏。

预先感谢您的帮助。

问候,
彼得

4

1 回答 1

1

肯定有多种方法可以做到这一点,一种是Action在您Controller的每个主从场景中创建一个专用的:

public class HomeController : Controller
{
     public ActionResult Detail1(Model model)
     {
         return View(model);
     }

     public ActionResult Detail2(Model model)
     {
         return View(model);
     }
} 

接下来,您将为主表创建一个可重用Partial的表,并根据您的逻辑触发正确的Action(伪代码):

<td>
    @if (<your logic for the detailed view to be displayed>)
    {
        Html.ActionLink("Edit", "Detail1");
    }
    else
    {
        Html.ActionLink("Edit", "Detail2");
    }
</td>

您将从Detail1Detail2视图中呈现主表。希望我对你的理解正确。干杯!

更新 - 阿贾克斯

如果您不希望在显示新详细信息时更新整个页面,您可以Ajax.ActionLink在主表中使用并更改为每个详细信息类型HomeController返回的方法。PartialView

<td>
    @if (<your logic for the detailed view to be displayed>)
    {
       Ajax.ActionLink("Edit", "Detail1", options);
    }
    else
    {
       Ajax.ActionLink("Edit", "Detail2", options);
    }
</td>

在哪里options指定UpdateTargetId应该用从控制器返回的详细视图替换的 div。

public class HomeController : Controller
{
     public ActionResult Master()
     {
         return View();
     }

     public ActionResult Detail1()
     {
         return PartialView();
     }

     public ActionResult Detail2()
     {
         return PartialView();
     }
}

最后,将jquery.unobtrusive脚本包含在主视图中(默认情况下位于~/bundles/jqueryval捆绑包中):

@section scripts
{
    @Scripts.Render("~/bundles/jqueryval")
}
于 2013-09-22T11:52:40.527 回答