2012-03-13 1 views
0

Я видел много сообщений с Url.Action, передавая null вместо значения, но ни с моей проблемой. У меня есть одна ссылка, которую я хочу, чтобы вызвать метод с нулевым значением.Метод действия передается экземпляр типа вместо нуля

Метод

public ActionResult ImpersonatePost(Role Role) 
{ 
    Authentication.Impersonating = Role; 

    return RedirectToAction("Index", "Home"); 
} 

в контроллере Impersonate.

Я пробовал следующее, но все они заканчиваются Role, равными new Role() вместо null. Role - class.

<a href="@Url.Action("ImpersonatePost", "Impersonate", null)">None</a> 

<a href="@Url.Action("ImpersonatePost", "Impersonate", default(Namespace.Role))">None</a> 

Per Request Роль определяется как (в формате не фактических свойств

public class Role 
{ 
    String Property {get;set;} 
} 
+0

Что такое роль, определяемая как? –

+0

'Url.Action' возвращает строку, а не новую' Role'. Вы имеете в виду, что параметр role * в методе действий * является 'Роль', а не' null', когда выполняется метод действия? Это из-за привязки модели. – bzlm

+0

@bzlm да, я имею в виду, когда метод ImpersonatePost называется Role, равен новой Role() не null. – Manatherin

ответ

1

Проблема с по умолчанию дополнительного параметра вяжущего ASP.Net MVC3. Там не правильный способ сделать дополнительный URL параметр связываются с нулем.

Если вы действительно хотите, чтобы обеспечить нулевой параметр, я хотел бы предложить, добавив его в маршрутизации код инициализации в файле global.asax.

routes.MapRoute(
       "Custom", 
       "{controller}/{action}/{nullableParamName}", 

      ); 

Если у вас есть метод, ожидающий nullableParamName в своем маршруте, и он не видит этого, он принимает значение nullableParamName как null.