Asp.net mvc ASP.NET MVC中的部分视图

Asp.net mvc ASP.NET MVC中的部分视图,asp.net-mvc,Asp.net Mvc,如何创建由三个部分视图页面组成的视图页面?我正在使用ASP.NETMVC // // GET: /Partial/ public ActionResult View1() { var upit = from i in proba.name select i; return PartialView("upit",proba.name); } <asp:Content ID="Co

如何创建由三个部分视图页面组成的视图页面?我正在使用ASP.NETMVC

    //
    // GET: /Partial/

    public ActionResult View1()
    {
        var upit = from i in proba.name
                   select i;
        return PartialView("upit",proba.name);
    }

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Index</h2>
<div><%Html.RenderPartial("View1",proba.name); %></div>
</asp:Content>
//
//获取:/Partial/
公共行动结果视图1()
{
var upit=proba.name中的i
选择i;
返回PartialView(“upit”,proba.name);
}
指数

为什么此代码返回错误:对象引用未设置为对象的实例。

在查看页面中,您可能希望使用
RenderPartial
方法

范例

假设我有3个局部视图,分别称为“视图1”、“视图2”和“视图3”。如果我想渲染所有3个视图以构成视图的内容,那么我会执行以下操作:

<div id="section1">
<% Html.RenderPartial("View1", Model.Table1) %>
</div>
<div id="section2">
<% Html.RenderPartial("View2", Model.Table2) %>
</div>
<div id="section3">
<% Html.RenderPartial("View3", Model.Table3) %>
</div>


我假设您会有一个母版页,您的观点来源于此,以便处理其他必要的标记。上面的内容将放在派生视图的
内容
部分。

在视图页面中,您希望使用
RenderPartial
方法

范例

假设我有3个局部视图,分别称为“视图1”、“视图2”和“视图3”。如果我想渲染所有3个视图以构成视图的内容,那么我会执行以下操作:

<div id="section1">
<% Html.RenderPartial("View1", Model.Table1) %>
</div>
<div id="section2">
<% Html.RenderPartial("View2", Model.Table2) %>
</div>
<div id="section3">
<% Html.RenderPartial("View3", Model.Table3) %>
</div>


我假设您会有一个母版页,您的观点来源于此,以便处理其他必要的标记。上面的内容将放在派生视图的
内容
部分。

我认为您希望使用RenderAction,而不是RenderPartial。视图1是一个动作,而不是视图。它返回部分视图,
upit
。注意,这需要MVC2(或MVC1+期货)。您可能还想用ChildActionOnlyAttribute来装饰动作,除非您也打算从AJAX调用它

[ChildActionOnly]
public ActionResult View1()
{
    var upit = from i in proba.name
               select i;
    return PartialView("upit",proba.name);
}


asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Index</h2>
<div><%= Html.Action("View1"); %></div>
</asp:Content>
[ChildActionOnly]
公共行动结果视图1()
{
var upit=proba.name中的i
选择i;
返回PartialView(“upit”,proba.name);
}
asp:Content ID=“Content2”ContentPlaceHolderID=“MainContent”runat=“server”>
指数

获取特定错误的原因是视图中未定义
proba
变量,也不需要定义该变量。在您的情况下,该操作确定传递给局部视图的模型,因此不需要传递任何数据。无论如何,在呈现动作时,您只能通过查询参数传递它。

我认为您希望使用RenderAction,而不是RenderPartial。视图1是一个动作,而不是视图。它返回部分视图,
upit
。注意,这需要MVC2(或MVC1+期货)。您可能还想用ChildActionOnlyAttribute来装饰动作,除非您也打算从AJAX调用它

[ChildActionOnly]
public ActionResult View1()
{
    var upit = from i in proba.name
               select i;
    return PartialView("upit",proba.name);
}


asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Index</h2>
<div><%= Html.Action("View1"); %></div>
</asp:Content>
[ChildActionOnly]
公共行动结果视图1()
{
var upit=proba.name中的i
选择i;
返回PartialView(“upit”,proba.name);
}
asp:Content ID=“Content2”ContentPlaceHolderID=“MainContent”runat=“server”>
指数

获取特定错误的原因是视图中未定义
proba
变量,也不需要定义该变量。在您的情况下,该操作确定传递给局部视图的模型,因此不需要传递任何数据。无论如何,在呈现操作时,您只能通过查询参数传递它。

如果一个数据表中的view1、view2和view3强类型视图可以正常工作,但如果view1是从一个表创建的,则会出现错误,来自其他数据表的View2和来自其他数据表的view3。为什么?您必须为视图所需的任何模型类型传入正确的模型。见更新example@ognjenb:获取异常的原因是
proba
不是变量。它仅在LINQ查询的上下文中使用。在您的情况下,您可以将
upit
传递到视图中,因为该视图是保存查询的位置。如果从一个数据表中创建view1、view2和view3强类型视图,则此操作正常,但如果从一个表中创建view1,则会出现错误,来自其他数据表的View2和来自其他数据表的view3。为什么?您必须为视图所需的任何模型类型传入正确的模型。见更新example@ognjenb:获取异常的原因是
proba
不是变量。它仅在LINQ查询的上下文中使用。就你而言,您可以将
upit
传递到视图中,因为该视图是保存查询的位置。在您的情况下,我有以下错误:执行处理程序'System.Web.Mvc.HttpHandlerUtil+serverexecutehttphandlerasyncwraper'的子请求时出错。@ognjenb:我使用了直接写入响应的版本,而不是返回字符串的版本。我已将其更新为使用正确的扩展方法。我也可以简单地将标记更改为不使用write封装响应的标记,也是。在您的情况下,我有一个错误:执行处理程序'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'的子请求时出错。@ognjenb:我使用了直接写入响应的版本,而不是返回字符串的版本。我已将其更新为使用正确的扩展方法。我也可以简单地将标记更改为不使用write包装响应的标记。