MVC 部分视图和控制器代码
MVC partial View and controller code
我不明白控制器如何处理分部视图,它与视图一样吗?我做了一个例子,似乎从未使用过部分视图控制器
这是例子
主视图(test.cshtml):
<h2>Main View</h2>
@Html.Partial("_Partial", new { myNumber = 11 })
局部视图(_Partial.cshtml):
<h3>partial view</h3>
<p>my number is @Html.ViewBag.myNumber</p>
控制器 (EtlMessagesController)
public ActionResult Test() {
return View();
}
public ActionResult _Partial(int myNumber) {
ViewBag.myNumber = myNumber;
return PartialView();
}
当我调用我期望的主视图时
Main View
partial view
my number is 11
但是数字11没有写。我错过了什么吗?
此处将匿名模型传递给局部视图:
<h2>Main View</h2>
@Html.Partial("_Partial", new { myNumber = 11 })
尝试使用显式模型 class 或仅 int
:
<h2>Main View</h2>
@Html.Partial("_Partial", 11)
然后你可以在局部视图中使用@model
关键字:
@model int
<h3>partial view</h3>
<p>my number is @Model</p>
至于:
public ActionResult _Partial(int myNumber) {
ViewBag.myNumber = myNumber;
return View();
}
你应该使用:
public ActionResult _Partial(int myNumber) {
return PartialView("_Partial", 11);
}
方法 PartialView
可用于 AJAX 场景以呈现 HTML 页面的一部分。
感谢评论和回答,我找到了 3 种方法:
- @Html.Action(感谢 Stephen Muecke 对问题的评论)
@Html.Partial()
不调用控制器方法 - 它只是呈现在名为“_Partial”的视图中定义的 html。您需要 @Html.Action("_Partial", new { myNumber = 11 })
来调用服务器方法并呈现它生成的 html
- 使用
ViewDataDictionary
(感谢 Mark Schevchenko 的回答和 this answer 在另一个问题上的回答)
@Html.Partial("_Partial", new { myNumber = 11 })
将第二个参数作为模型传递,将参数传递给控制器 ViewDataDictionary
应该改用
@Html.Partial("_Partial", new ViewDataDictionary { { "myNumber", 11 } }
- 使用
integer
作为部分视图模型(感谢 Mark Schevchenko 的回答)
参见 Mark Schevchenko 的回答。这种方式的缺点是你不能在你的部分视图上有另一个模型
我不明白控制器如何处理分部视图,它与视图一样吗?我做了一个例子,似乎从未使用过部分视图控制器
这是例子
主视图(test.cshtml):
<h2>Main View</h2>
@Html.Partial("_Partial", new { myNumber = 11 })
局部视图(_Partial.cshtml):
<h3>partial view</h3>
<p>my number is @Html.ViewBag.myNumber</p>
控制器 (EtlMessagesController)
public ActionResult Test() {
return View();
}
public ActionResult _Partial(int myNumber) {
ViewBag.myNumber = myNumber;
return PartialView();
}
当我调用我期望的主视图时
Main View
partial view
my number is 11
但是数字11没有写。我错过了什么吗?
此处将匿名模型传递给局部视图:
<h2>Main View</h2>
@Html.Partial("_Partial", new { myNumber = 11 })
尝试使用显式模型 class 或仅 int
:
<h2>Main View</h2>
@Html.Partial("_Partial", 11)
然后你可以在局部视图中使用@model
关键字:
@model int
<h3>partial view</h3>
<p>my number is @Model</p>
至于:
public ActionResult _Partial(int myNumber) {
ViewBag.myNumber = myNumber;
return View();
}
你应该使用:
public ActionResult _Partial(int myNumber) {
return PartialView("_Partial", 11);
}
方法 PartialView
可用于 AJAX 场景以呈现 HTML 页面的一部分。
感谢评论和回答,我找到了 3 种方法:
- @Html.Action(感谢 Stephen Muecke 对问题的评论)
@Html.Partial()
不调用控制器方法 - 它只是呈现在名为“_Partial”的视图中定义的 html。您需要 @Html.Action("_Partial", new { myNumber = 11 })
来调用服务器方法并呈现它生成的 html
- 使用
ViewDataDictionary
(感谢 Mark Schevchenko 的回答和 this answer 在另一个问题上的回答)
@Html.Partial("_Partial", new { myNumber = 11 })
将第二个参数作为模型传递,将参数传递给控制器 ViewDataDictionary
应该改用
@Html.Partial("_Partial", new ViewDataDictionary { { "myNumber", 11 } }
- 使用
integer
作为部分视图模型(感谢 Mark Schevchenko 的回答)
参见 Mark Schevchenko 的回答。这种方式的缺点是你不能在你的部分视图上有另一个模型