我有这个动作:
public ActionResult AddCategory(Category newCategory)
{
...//newCategory.Name is filled up
return new Json(true);
}
此行动发表的观点:
@using(Html.BeginForm)
{
@Html.TextBoxFor(Model.Name)
.....
}
现在我想重用这个Action,但是在另一个页面中。 但是在这个新视图中,我已经有了另一个Html.TextBox(“名称”)。它是一种DashBoard。
这个新的View,在Model中有一个属性NewCategory:
public class MyViewModel
{
public Category NewCategory{get;set;}
}
如果我这样做:
@using(Ajax.BeginForm)
{
@Html.TextBoxFor(Model.NewCategory.Name)
.....
}
不工作,因为我的行为不期望任何前缀,在本例中为NewCategory。
当然,我可以手动调用Action,但是这样做我丢失了内置验证(我使用DataAnnotation进行不显眼的验证)。
这是我不时堕落的情景
我现在拥有的最佳选择是复制动作:
public ActionResult AddCategory([Bind(Prefix="NewCategory")]Category category)
{
...
return new Json(true);
}
答案 0 :(得分:0)
调用Html.RenderAction在其他视图中重用动作结果,并为您的模型传递名称参数,例如:
使用Html.RenderAction(“AddCategory”,new {name = Model.CategoryName})
答案 1 :(得分:0)
解决方案是创建另一个具有“相同”赋值的方法:
[ActionName("AddCategory")]
public ActionResult AddCategory2([Bind(Prefix="NewCategory2")]Category category)
{
...
return new Json(true);
}
答案 2 :(得分:-1)
我从您的问题中理解的是,您在某个View X中,并且您希望在此视图中呈现AddCategory View,而Model X包含NewCategory,其类型为Category,并由AddCategory View作为模型接受。如果是这样,你只需要在View X中调用render partial
<%Html.RenderPartial("AddCategory", Model.NewCategory);%>