繁体   English   中英

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();
}

当我调用主视图时,我期望

主视图

部分视图

我的号码是11

但是没有写数字11。 我想念什么吗?

在这里,您将匿名模型传递给局部视图:

<h2>Main View</h2>
@Html.Partial("_Partial", new { myNumber = 11 })

尝试使用显式模型类或仅使用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的答案, 这个答案在另一个问题)

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

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

参见马克·舍甫琴科的答案。 这种方式的缺点是,您无法在局部视图上使用其他模型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM