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 种方法:

  1. @Html.Action(感谢 Stephen Muecke 对问题的评论)

@Html.Partial() 不调用控制器方法 - 它只是呈现在名为“_Partial”的视图中定义的 html。您需要 @Html.Action("_Partial", new { myNumber = 11 }) 来调用服务器方法并呈现它生成的 html

  1. 使用 ViewDataDictionary(感谢 Mark Schevchenko 的回答和 this answer 在另一个问题上的回答)

@Html.Partial("_Partial", new { myNumber = 11 }) 将第二个参数作为模型传递,将参数传递给控制器​​ ViewDataDictionary 应该改用

@Html.Partial("_Partial", new ViewDataDictionary { { "myNumber", 11 } }
  1. 使用 integer 作为部分视图模型(感谢 Mark Schevchenko 的回答)

参见 Mark Schevchenko 的回答。这种方式的缺点是你不能在你的部分视图上有另一个模型