伙计们,
环境:ASP .NET MVC 4
在我需要构建的视图中,需要有两个部分。顶部显示了一个表格。根据用户选择的行,我需要在底部呈现适当的用户界面。本质上,它是一个主从视图,除了详细信息中的控件会根据主部分中的选定行而变化。
我猜我需要创建与每种详细信息类型相对应的部分视图,并以某种方式以编程方式显示正确的视图。
如果有人能告诉我正确的方法是什么,我将不胜感激。任何示例代码或现有示例的链接都将受到高度赞赏。
预先感谢您的帮助。
问候,
彼得
伙计们,
环境:ASP .NET MVC 4
在我需要构建的视图中,需要有两个部分。顶部显示了一个表格。根据用户选择的行,我需要在底部呈现适当的用户界面。本质上,它是一个主从视图,除了详细信息中的控件会根据主部分中的选定行而变化。
我猜我需要创建与每种详细信息类型相对应的部分视图,并以某种方式以编程方式显示正确的视图。
如果有人能告诉我正确的方法是什么,我将不胜感激。任何示例代码或现有示例的链接都将受到高度赞赏。
预先感谢您的帮助。
问候,
彼得
肯定有多种方法可以做到这一点,一种是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>
您将从Detail1
和Detail2
视图中呈现主表。希望我对你的理解正确。干杯!
更新 - 阿贾克斯
如果您不希望在显示新详细信息时更新整个页面,您可以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")
}