ASP.NET MVC重用不同前缀的Action?

时间:2011-06-08 00:53:57

标签: asp.net-mvc bind modelbinders

我有这个动作:

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);
}

3 个答案:

答案 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);%>