Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在Html.RenderAction(MVC3)中发送模型对象_Asp.net Mvc_Asp.net Mvc 3_Razor_Asp.net Mvc Partialview - Fatal编程技术网

Asp.net mvc 如何在Html.RenderAction(MVC3)中发送模型对象

Asp.net mvc 如何在Html.RenderAction(MVC3)中发送模型对象,asp.net-mvc,asp.net-mvc-3,razor,asp.net-mvc-partialview,Asp.net Mvc,Asp.net Mvc 3,Razor,Asp.net Mvc Partialview,我使用的是MVC3 razor,我试图将一个对象传递给局部视图,但它不起作用 这可以在不将对象模型发送到局部视图的情况下正常工作: Html.RenderAction("Index", "ViewName"); 尝试这样做不会发送模型对象,而是得到空值(对象有数据,视图需要它):' 这甚至可以使用渲染吗 谢谢 编辑:我发现了错误,控制器的操作出现错误,没有拾取发送的对象。谢谢你的帮助 如果你想把foo作为模型传递,那么先让它通过 public class Foo { public st

我使用的是MVC3 razor,我试图将一个对象传递给局部视图,但它不起作用

这可以在不将对象模型发送到局部视图的情况下正常工作:

Html.RenderAction("Index", "ViewName");
尝试这样做不会发送模型对象,而是得到空值(对象有数据,视图需要它):'

这甚至可以使用渲染吗

谢谢


编辑:我发现了错误,控制器的操作出现错误,没有拾取发送的对象。谢谢你的帮助

如果你想把
foo
作为模型传递,那么先让它通过

public class Foo {
    public string Name { get; set; }
    public int Age { get; set; }
}
现在做出一个行动结果

public ActionResult FooBar(Foo _foo){
    return PartialView(_foo);
}
叫它

@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 });

假设您想将
foo
作为模型传递,请先进行传递

public class Foo {
    public string Name { get; set; }
    public int Age { get; set; }
}
现在做出一个行动结果

public ActionResult FooBar(Foo _foo){
    return PartialView(_foo);
}
叫它

@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 });

通常,如果我已经有了一个可用的模型,那么使用
Html.Partial
比尝试渲染动作更有意义

@Html.Partial("Foo", Model.FooModel)
其中,
Foo.cshtml
是一个视图文件(可能在您的共享文件夹中),强类型为with
@model FooProject.Models.FooModel
或任何您的模型调用。这可以是您需要的复杂模型。Model是页面的主模型,必须在其中设置
FooModel
——或者,如果
Foo
视图使用与父页面相同的模型,则忽略此参数


RenderAction
通常在只有简单参数的情况下更好,因为您只是在模拟对具有路由/查询字符串参数的常规操作的请求,然后将该响应转储到页面中。如果您需要在页面模型中不可用的布局中放置某些内容,例如侧栏中的元素,则此功能非常有效。

通常,如果我已经有可用的模型,则使用
Html.Partial
比尝试呈现动作更有意义

@Html.Partial("Foo", Model.FooModel)
其中,
Foo.cshtml
是一个视图文件(可能在您的共享文件夹中),强类型为with
@model FooProject.Models.FooModel
或任何您的模型调用。这可以是您需要的复杂模型。Model是页面的主模型,必须在其中设置
FooModel
——或者,如果
Foo
视图使用与父页面相同的模型,则忽略此参数


RenderAction
通常在只有简单参数的情况下更好,因为您只是在模拟对具有路由/查询字符串参数的常规操作的请求,然后将该响应转储到页面中。如果您需要在页面模型中不可用的布局中放置某些内容,例如侧栏中的元素,则该方法非常有效。

您实际上可以使用操作将对象传递给控制器方法。这可以在任何可用的视图上完成,例如,我在共享库中有一个视图,它构建到引用我的共享项目的项目bin文件夹中(属性-在Visual Studio中的视图文件上复制,如果更新)。是这样做的:

控制器:

public class GroovyController : Controller
{
    public ActionResult MyTestView(MyModel m)
    {
        var viewPath = @"~\bin\CommonViews\MyTestView";
        return View(viewPath, m);
    }
}
@Html.Action("MyTestView", "Groovy", new { m = Model })
MVC页面(使用Razor语法):

public class GroovyController : Controller
{
    public ActionResult MyTestView(MyModel m)
    {
        var viewPath = @"~\bin\CommonViews\MyTestView";
        return View(viewPath, m);
    }
}
@Html.Action("MyTestView", "Groovy", new { m = Model })
或者使用
RenderAction
方法:

@{ Html.RenderAction("MyTestAction", "MyTestController", new { area = "area", m = Model }); }

注意:在
@Html.Action()
中,
Model
对象的类型必须为
MyModel
,第三个参数必须设置为控制器变量名,我的变量名为
MyModel m
m
是您必须分配给的对象,因此我可以使用Action将对象传递给控制器方法。这可以在任何可用的视图上完成,例如,我在共享库中有一个视图,它构建到引用我的共享项目的项目bin文件夹中(属性-在Visual Studio中的视图文件上复制,如果更新)。是这样做的:

控制器:

public class GroovyController : Controller
{
    public ActionResult MyTestView(MyModel m)
    {
        var viewPath = @"~\bin\CommonViews\MyTestView";
        return View(viewPath, m);
    }
}
@Html.Action("MyTestView", "Groovy", new { m = Model })
MVC页面(使用Razor语法):

public class GroovyController : Controller
{
    public ActionResult MyTestView(MyModel m)
    {
        var viewPath = @"~\bin\CommonViews\MyTestView";
        return View(viewPath, m);
    }
}
@Html.Action("MyTestView", "Groovy", new { m = Model })
或者使用
RenderAction
方法:

@{ Html.RenderAction("MyTestAction", "MyTestController", new { area = "area", m = Model }); }

注意:在
@Html.Action()
中,
Model
对象的类型必须为
MyModel
,第三个参数必须设置为控制器变量名,我的变量名为
MyModel m
m
是您必须分配给的,因此我需要
m=Model

您可以提供您正在调用的操作的签名吗?为什么要将viewname作为参数传递?您应该传递操作和控制器instead@Html.RenderAction(“Index”,“ViewName”,new{objectParam1=objectModel1,objectParam1=objectModel2})您可以提供您正在调用的操作的签名吗?为什么要将ViewName作为参数传递?您应该传递操作和控制器instead@Html.RenderAction(“索引”,“视图名”,新的{objectParam1=objectModel1,objectParam1=objectModel2})感谢您的回答。我在控制器的动作签名中忽略了一个错误。修复了它,现在它得到了对象。这个通过ModelState了吗?谢谢!但我必须用大括号将Html.RenderAction调用包围起来才能使其工作。否则,Razor会说“不能隐式地将类型'void'转换为'object'”,谢谢您的回答。我在控制器的动作签名中忽略了一个错误。修复了它,现在它得到了对象。这个通过ModelState了吗?谢谢!但我必须用大括号将Html.RenderAction调用包围起来才能使其工作。否则,Razor说“不能隐式地将类型'void'转换为'object'”,这应该是可以接受的答案。感谢您在一年后添加它。@Valamas AUS谢谢:)这应该是公认的答案。感谢您在一年后添加它。@Valamas AUS谢谢:)