ASP.NET MVC повторно использовать Action с другим префиксом? - PullRequest
0 голосов
/ 08 июня 2011

У меня есть это действие:

public ActionResult AddCategory(Category newCategory)
{
    ...//newCategory.Name is filled up
    return new Json(true);
}

И посмотреть этот пост в этом действии:

@using(Html.BeginForm)
{
@Html.TextBoxFor(Model.Name)
.....
}

Теперь я хочу повторно использовать это действие, но на другой странице. Но в этом новом представлении у меня уже есть Html.TextBox («имя») в другом. Это своего рода DashBoard.

Это новый вид, есть свойство NewCategory внутри модели:

public class MyViewModel
{
    public Category NewCategory{get;set;}
}

Если я сделаю это:

@using(Ajax.BeginForm)
{
    @Html.TextBoxFor(Model.NewCategory.Name)
    .....
}

Не сработает, потому что мои действия не ожидают префикса, в данном случае NewCategory.

Конечно, я могу вручную вызвать Действие, но при этом я потерял встроенную проверку (я использую DataAnnotation с ненавязчивой проверкой).

Это сценарий, на который я падаю время от времени

Лучший выбор, который у меня сейчас есть, это дублирование Действие:

public ActionResult AddCategory([Bind(Prefix="NewCategory")]Category category)
{
    ...
    return new Json(true);
}

Ответы [ 3 ]

0 голосов
/ 08 июня 2011

Вызовите Html.RenderAction для повторного использования результата действия в других представлениях и передайте ему параметр имени для вашей модели, например:

Используйте Html.RenderAction ("AddCategory", new {name = Model.CategoryName).})

0 голосов
/ 24 февраля 2012

Решение состоит в том, чтобы создать другой метод с таким же присвоением:

[ActionName("AddCategory")]
public ActionResult AddCategory2([Bind(Prefix="NewCategory2")]Category category)
{
    ...
    return new Json(true);
}
0 голосов
/ 08 июня 2011

Что я понимаю из вашего вопроса, так это то, что вы находитесь в каком-то View X, и вы хотите визуализировать AddCategory View внутри этого представления, а Model of View X содержит NewCategory, которая имеет тип Category и принимается AddCategory View как модель. если это так, вам просто нужно вызвать частичное рендеринг в вашем View X

<%Html.RenderPartial("AddCategory", Model.NewCategory);%>
...