Mic*_*ael 23 asp.net-mvc asp.net-mvc-partialview razor asp.net-mvc-3
我正在使用MVC3剃刀,我正在尝试将对象传递给局部视图,但它无法正常工作.
这可以正常工作,而无需将对象模型发送到局部视图:
Html.RenderAction("Index", "ViewName");
Run Code Online (Sandbox Code Playgroud)
尝试这个不会发送模型对象,我会得到空值(对象有数据,视图需要它):'
Html.RenderAction("Index", "ViewName", objectModel);
Run Code Online (Sandbox Code Playgroud)
甚至可以使用RenderAction吗?
谢谢!
编辑:我发现了错误,控制器的操作没有收到发送的对象时出错.感谢你的帮助!
the*_*erm 33
您实际上可以使用Action将对象传递给控制器方法.这可以在任何avaialble视图上完成,例如我在共享库中有一个可以构建到引用我的共享项目的项目bin文件夹(属性 - 在视图文件中复制,如在Visual Studio中).它是这样完成的:
控制器:
public class GroovyController : Controller
{
public ActionResult MyTestView(MyModel m)
{
var viewPath = @"~\bin\CommonViews\MyTestView";
return View(viewPath, m);
}
}
Run Code Online (Sandbox Code Playgroud)
MVC页面(使用Razor语法):
@Html.Action("MyTestView", "Groovy", new { m = Model })
Run Code Online (Sandbox Code Playgroud)
或使用RenderAction方法:
@{ Html.RenderAction("MyTestAction", "MyTestController", new { area = "area", m = Model }); }
Run Code Online (Sandbox Code Playgroud)
注意:在@Html.Action(),Model对象必须是类型MyModel,并且第三个参数必须设置为控制器变量名,我的是MyModel m.这m是你必须分配的,所以我做m = Model.
Joh*_*n x 25
说你想foo成为模特,先把它做好
public class Foo {
public string Name { get; set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在制作一个ActionResult
public ActionResult FooBar(Foo _foo){
return PartialView(_foo);
}
Run Code Online (Sandbox Code Playgroud)
叫它
@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 });
Run Code Online (Sandbox Code Playgroud)
通常,如果我有一个已经可用的模型,那么使用它Html.Partial比尝试渲染一个动作更有意义.
@Html.Partial("Foo", Model.FooModel)
Run Code Online (Sandbox Code Playgroud)
其中Foo.cshtml一种观点文件(或许在你的共享文件夹)与强类型@model FooProject.Models.FooModel或任何你的模型被称为.这可能是您需要它的复杂模型.模型是您必须设置的页面主要模型FooModel- 如果Foo视图使用与父页面相同的模型,则只省略此参数.
RenderAction当您只有简单的参数时通常会更好,因为您只是模拟对具有路由/查询字符串参数的常规操作的请求 - 然后将该响应转储到您的页面中.如果您需要在页面模型中不可用的布局中放置某些内容(例如侧栏中的元素),则效果很好.
| 归档时间: |
|
| 查看次数: |
44086 次 |
| 最近记录: |