2010-12-23 5 views
1

У меня есть простое действие:Почему мое ASP.NET-действие ищет неправильный вид?

public ActionResult CommentError(string error) 
    { 
     return View(error); 
    } 

У меня есть простой частичный вид под названием CommentError.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<String>" %> 

<%: Model %> 

Когда я просматриваю к виду directy, перейдя в myurl.com/find/Comments/CommentError окне показывает тонкие .. нет ошибок.

Но, когда я перехожу к myurl.com/find/Comments/CommentError?error=SomeErrorString, вместо привязки строки запроса к string error он ищет вид под названием SomeErrorString.ascx.

Почему это происходит?

Редактировать
Обратите внимание, у меня есть пользовательский global.asax, как указано дорожкам, я использую (/ найти/Комментарии/CommentError :::/найти/{контроллер}/{действие})

ответ

6

Как уже упоминалось, MVC ищет точку с именем, аналогичную параметру string. Чтобы избежать этого, необходимо привести его к объекту ...

public ActionResult CommentError(string error) 
{ 
    return View((object)error); 
} 
+0

спасибо ... perfect – quakkels

4

Вы, должно быть, избегаете объекта Model, который вы передаете в View() помощник типа string. Это является причиной вашей ошибки.

MVC ищет Viewс именем, каков ваш параметр строки. Поскольку это наилучшая совпадающая перегрузка View(): перегрузка View(string) использует параметр string как имя вида для загрузки.

Вы должны инкапсулировать данные модели (строки) в пользовательском типе или передать эту информацию через коллекцию ViewData.

+0

.. ViewData? И отказаться от строго типизированных просмотров? действительно? – quakkels

+0

@quakkels: В качестве второго варианта, если разработчик решит отказаться от первого предложенного маршрута, пользовательской модели. – David

+0

@David - Я упомянул пользовательский объект модели. quakkels был слишком занят коленом, чтобы понять, что я думаю. –

0

В качестве альтернативного ответа (только для образования), вы можете просто вызвать другую перегрузку View()

return View("CommentError", null, error); 
+0

Спасибо за дополнительную информацию! – quakkels

Смежные вопросы