Вопрос по помощнику Html.ActionLink - в частности, синтаксис для параметра объекта routeValues - PullRequest
0 голосов
/ 22 ноября 2010

Итак, я понимаю использование HTML-помощника ActionLink, а также большинство параметров.Я все еще нахожусь в процессе обдумывания всего диапазона использования параметра routeValues ​​объекта.

Однако мой вопрос заключается в том, что для параметра routeValues ​​вы можете указать объект как существующий объект из словаря ViewData:

Html.ActionLink("Some Text", "Edit", Model.ProductId);

или использовать синтаксис инициализации объекта:

Html.ActionLink("Some Text", "Edit", new { Model.ProductId });

Мои 2 вопроса:

A) Какова основная причина использовать один над другим?Мне трудно понять, почему вы должны инициализировать новое, так как у вас уже есть свойство с правильным значением в Модели.

B) Я понимаю создание экземпляра нового объекта (т. Е. Var someVar = new SomeObject ()), но что вы определяете в приведенном выше примере (новый {Model.ProductID}) и указываете свойство?

Спасибо,

Ответы [ 3 ]

0 голосов
/ 22 ноября 2010

AFAIK, оба из них неверны.Когда вы указываете объект, который не является RouteValueDictionary (обычно это анонимный объект), он передает пары свойство / значение в словарь, используя отражение над свойствами объекта.Ни в том, ни в другом случае вы не получите объект, который преобразуется в RouteValueDictionary, содержащий ключ id со связанным значением.Во втором случае, Я не думаю, что у вас даже есть допустимый синтаксис , он не будет корректно отображаться на параметр id с учетом маршрутов по умолчанию.Синтаксис, который вам нужен:

Html.ActionLink("Some Text", "Edit", new { id = Model.ProductId } );

Вы создаете анонимный объект со свойством id, значение которого Model.ProductId.Это приведет к RouteValueDictionary с ключом id, который отображается на значение Model.ProductId.

0 голосов
/ 22 ноября 2010

B) синтаксис new { id = 1, name = "11" } означает «создать анонимный объект». Во время процесса компиляции компилятор находит все такие использования и создает классы с нечитаемыми именами в вашей сборке, например:

class AnonymousType`1
{
    int id {get; private set};
    int name {get; private set};
}

тогда все ссылки изменяются на код, подобный этому new <>AnonymousType`1{ id = 1, name = "11" } Это просто описание того, как это работает, сгенерированный код немного сложнее.

A) Итак, вы видите, что Model.ProductId - это int, а new { Model.ProductId } - это экземпляр некоторого типа, сгенерированный компилятором.

Вы можете проверить это с помощью Reflector. Подробнее о Анонимные типы

0 голосов
/ 22 ноября 2010

Возможно, вы захотите отправить другие значения в действие контроллера

Пример:

Html.ActionLink("Some Text", "Edit", new { id=Model.ProductId, myotherValue=1 });

И ваше управляющее действие выглядит примерно так

Public ActionResult Edit(int id, int myotherValue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...