ASP .NET MVC 3 - передача параметров из представления в контроллер - PullRequest
1 голос
/ 10 октября 2011

Если вы передадите анонимный объект обратно в контроллер, он заполняет аргументы контроллера, просматривая имена свойств анонимного объекта - так как бы мне передать свойства связанных объектов в мою модель, чтобы средство связывания значений по умолчанию могло связать их?

Например:

Модель:

public class MyViewModel
{
    public MyItem MyItem { get; set; }
}

public class MyItem
{
    public string Name { get; set; }
}

Контроллер:

public ActionResult Index(MyViewModel model)
{
    return View(model);
}

По-моему, я хочу передать MyItem.Name обратно, как это возможно? Я пробовал:

@Html.ActionLinke("Index", "MyController", new { name = "example" })

и

@Html.ActionLinke("Index", "MyController", new { myItem_Name = "example" })

Помогите пожалуйста!

Ответы [ 4 ]

2 голосов
/ 10 октября 2011

Вы пробовали:

@Html.ActionLink("Index", "MyController", new { name = @Model.MyItem.Name })

А в методе действия:

public ActionResult Index(string name)
{
    return View();
}
1 голос
/ 10 октября 2011

Я думаю, что вы можете неправильно понимать «передачу объекта из поля зрения в контроллер».Дело не в том, что вы передаете объект - вы просто отображаете ссылку (тег привязки) на странице.Запрос фактически поступит из браузера, когда пользователь нажимает на ссылку.Не происходит передачи объекта на стороне сервера.

Ссылка должна содержать все параметры, которые вам нужны на стороне сервера (в контроллере), в качестве параметров строки запроса.

Я думаюто, что вы действительно хотите сделать, это либо:

  1. отобразить форму и отправить ее, либо

  2. передать только идентификатор данных, которые вынужно и в контроллере извлечь его (из БД например)

1 голос
/ 10 октября 2011

Вы можете использовать следующую перегрузку:

@Html.ActionLink( 
    "link text",                             // linkText
    "Index",                                 // actionName
    "MyController",                          // controllerName
    new RouteValueDictionary {               // routeData
        { "MyItem.Name", "example" } 
    }, 
    null                                     // htmlAttributes
)
0 голосов
/ 03 августа 2012

Ответ заключался в создании пользовательских ModelBinder и ModelBinderProvider.

...