2013-11-22 1 views
0

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

Это в Account зоне, в AccountController, и вид ConfirmAccount.cshtml. Он принимает модель string.

Я попытался это:

A) Я пытался просто проездом в модели как обычно, с именем вида, совпадающим с именем действия.

public ActionResult ConfirmAccount(string id) 
    { 
     return View(id); 
    } 

Это не похоже на работу, поскольку модель представляет собой строку, она просто пыталась найти строку с именем id.

B) Поэтому я попытался указать имя вида, надеясь, что он найдет представление ConfirmAccount, и понять id - это модель.

public ActionResult ConfirmAccount(string id) 
    { 
     return View("ConfirmAccount", id); 
    } 

Результаты этого одного смутило меня, он пытался найти следующее:

~/Районы/счета/Views/Account/ConfirmAccount.aspx ~/Районы/счета/Views/Account/ConfirmAccount.ascx ~/Areas/Account/Views/Shared/ConfirmAccount.aspx ~/Areas/Account/Views/Shared/ConfirmAccount.ascx ~/Views/Account/ConfirmAccount.aspx ~/Просмотры/Аккаунт/ConfirmAccount.ascx ~/Views/Shared/ConfirmAccount.aspx ~/Views/Shared/ConfirmAccount.ascx ~/Районы/счета/Views/Account/xNMf1HNl_2pLp-6MXpXl3g2If.master ~/Areas/счет/Просмотров/Shared/xNMf1HNl_2pLp-6MXpXl3g2If.master ~/Просмотров/данные/xNMf1HNl_2pLp-6MXpXl3g2If.master ~/Просмотров/Общие /xNMf1HNl_2pLp-6MXpXl3g2If.master ~/районы/счет/Views/Account/xNMf1HNl_2pLp-6MXpXl3g2If.cshtml ~/районы/счет/Views/Account/xNMf1HNl_2pLp-6MXpXl3g2If.vbhtml ~/Область/данные/Views/Shared/xNMf1HNl_2pLp -6MXpXl3g2If.cshtml ~/районы/счета/Views/Shared/xNMf1HNl_2pLp-6MXpXl3g2If.vbhtml ~/Views/Account/xNMf1HNl_2pLp-6MXpXl3g2If.cshtml ~/Views/счет/xNMf1HNl_2pLp-6MXpXl3g2If.vbhtml ~/Просмотров/Общие /xNMf1HNl_2pLp-6MXpXl3g2If.cshtml ~/Просмотры/S Харед/xNMf1HNl_2pLp-6MXpXl3g2If.vbhtml

Где он ищет ASPX/ASCX страниц было бы идеально, если он ищет cshtml страниц там, но по какой-то причине это не так и вместо этого пытается найти CS/vbshtml страниц по идентификатору. Кто-нибудь знает, почему это происходит?

C) Третья и единственная вещь, о которой я мог думать, заключалась также в том, чтобы указать имя контроллера.

public ActionResult ConfirmAccount(string id) 
    { 
     return View("ConfirmAccount", "Account", id); 
    } 

~/Районы/счет/Views/Account/ConfirmAccount.aspx ~/Районы/счет/Views/Account/ConfirmAccount.ascx ~/Область/данные/Views/Shared/ConfirmAccount.aspx ~/Areas/Account/Views/Shared/ConfirmAccount.ascx ~/Views/Account/ConfirmAccount.aspx ~/Views/Account/ConfirmAccount.ascx ~/Views/Shared/ConfirmAccount.aspx ~/Просмотры/Общие/ConfirmAccount.ascx ~/Районы/Счет/Просмотры/Счет/Счет.мастер ~/Районы/Учетная запись/Просмотры/Общий/Account.master ~/Views/Account/Account.master ~/Views/Shared/Account.master ~/Районы/Учетная запись/Просмотры/Учетная запись/Account.cshtml ~ /Areas/Account/Views/Account/Account.vbhtml ~/Areas/Account/Views/Shared/Account.cshtml ~/Areas/Account/Views/Shared/Account.vbhtml ~/Views/Account/Account.cshtml ~/Views/запись/Account.vbhtml ~/Просмотров/Shared/Account.cshtml ~/Просмотров/Shared/Account.vbhtml

Это похоже на последней, где первые являются правильный путь если он искал cshtml, но по какой-то причине это не так, и я не понять почему. Где он ищет страницы cshtml, он ищет учетную запись вместо ConfirmAccount.

Как правильно вернуть представление ConfirmAccount.cshtml в сценарий, где моя модель является строкой?

ответ

1

Когда вы передаете строку в качестве единственного параметра, используется перегрузка View(string viewName).

Вам необходимо убедиться, что вы используете перегруз View(object model).

Вы можете сделать это, выбрав свою модель на object.

return View((object)id); 

Я склонен избегать string моделей, а именно по этой причине.

Убедитесь, что вы смотрите на все перегрузками для View - например: string, string является viewName, masterNamestring, object, где находится viewName, model, поэтому для того, чтобы использовать это, вы снова должны бросить в object. Перегрузка для трех параметров: viewName, masterName, model.

+0

Спасибо! Не мог придумать, как заставить его использовать объект, очень простое решение. – Kyle

+0

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

0

По умолчанию WebFormViewEngine включен ДО RazorViewEngine. Вот почему он ищет * .aspx.

Чтобы исправить это, скажите View Engine искать бритвенные Просмотры перед тем WebForm Просмотров понижая следующий код в Global.asax.cs

protected void Application_Start() 
{ 
    ViewEngines.Engines.Clear(); 
    ViewEngines.Engines.Add(new RazorViewEngine()); 
    ViewEngines.Engines.Add(new WebFormViewEngine()); 
} 
+0

Хотя это, похоже, меняет его, поэтому он сначала ищет .cshtml, а затем .aspx, он по-прежнему ищет каждого в тех же местах, а .cshtml - неправильные местоположения. – Kyle

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