【问题标题】:MVC partial View and controller codeMVC 部分视图和控制器代码
【发布时间】:2015-12-06 17:03:25
【问题描述】:

我不明白控制器如何处理部分视图,它与视图相同吗?我做了一个例子,似乎从未使用过部分视图控制器

这是一个例子

主视图(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 没有写。我错过了什么吗?

【问题讨论】:

  • 这只是一个例子来理解为什么不调用部分视图控制器。在我的场景中,部分视图需要获取模型对象列表并渲染其中的一部分
  • @Html.Partial() 不调用控制器方法 - 它只是呈现在名为 "_Partial" 的视图中定义的 html。您需要@Html.Action("_Partial", new { myNumber = 11 }) 来调用服务器方法并渲染它生成的html

标签: c# asp.net-mvc razor partial-views asp.net-mvc-partialview


【解决方案1】:

感谢cmets和答案,我找到了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 的回答。这种方式的缺点是你的局部视图上不能有另一个模型

【讨论】:

    【解决方案2】:

    这里你将匿名模型传递给局部视图:

    <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 页面的一部分。

    【讨论】:

    • ad 如果我的局部视图已经有一个模型怎么办?假设它有@model myCustomClass,我需要一个整数参数public ActionResult _Partial(int myNumber) { ...my code }
    • F.e. _Partial(new myCustomClass { integerField = myNumber }).
    • 谢谢,问题略有不同,但您的示例帮助很大
    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 2017-01-30
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2016-01-24
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多