我正在尝试生成这样的HTML
<form action="/some/process" method="post">
<input type="hidden" name="foo.a" value="aaa"/>
<input type="hidden" name="bar.b" value="bbb"/>
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
所以它可以被这个Action处理:
public ActionResult Process(Foo foo, Bar bar)
{
...
}
Run Code Online (Sandbox Code Playgroud)
给定Action代码
public ActionResult Edit()
{
ViewData["foo"] = new Foo { A = "aaa" };
ViewData["bar"] = new Bar { B = "bbb" };
return View();
}
Run Code Online (Sandbox Code Playgroud)
我应该在Edit.aspx视图中写什么?我不想手动写名字'foo.a'和'bar.b'.
Wya*_*ett 40
字符串索引ViewData很糟糕.您可能想要做的是为您的多变量视图数据创建一个小包装类,并将其传递给强类型视图.IE:
public class FooBarViewData
{
public Foo Foo {get; set;}
public Bar Bar {get; set;}
}
public ActionResult Edit()
{
FooBarViewData fbvd = new FooBarViewData();
fbvd.Foo = new Foo(){ A = "aaa"};
fbvd.Bar = new Bar(){ B = "bbb"};
return View(fbvd);
}
Run Code Online (Sandbox Code Playgroud)
然后您的视图只是强类型FooBarViewData,您可以使用该Model属性调用该对象的成员.
tva*_*son 10
你有几个选择.首先,您可以从ViewData引用它们并使用HtmlHelper扩展.或者,您可以创建特定于视图的模型,并为Edit.aspx使用强类型视图页.
public class EditModel
{
public Foo foo { get; set; }
public Bar bar { get; set; }
}
public ActionResult Edit()
{
var model = new EditModel();
model.foo = new Foo { A = "aaa" };
model.bar = new Bar { B = "bbb" };
return View( model );
}
Run Code Online (Sandbox Code Playgroud)
(Edit.aspx属于类型ViewPage<EditModel>)
无论哪种方式,HtmlHelper扩展都会获取任何初始值.
<form action="/some/process" method="post">
<%= Html.Hidden( "foo.A" ) %>
<%= Html.Hidden( "bar.B" ) %>
</form>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28366 次 |
| 最近记录: |