Ответ 1
Да, если вы используете правую перегрузку:
return View("~/Views/Sth/Sth.cshtml" /* view name*/,
null /* master name */,
"abc" /* model */);
У меня странная проблема с моей моделью, переданной в представление
контроллер
[Authorize]
public ActionResult Sth()
{
return View("~/Views/Sth/Sth.cshtml", "abc");
}
Просмотр
@model string
@{
ViewBag.Title = "lorem";
Layout = "~/Views/Shared/Default.cshtml";
}
Сообщение об ошибке
The view '~/Views/Sth/Sth.cshtml' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/Sth/Sth.cshtml
~/Views/Sth/abc.master //string model is threated as a possible Layout name ?
~/Views/Shared/abc.master
~/Views/Sth/abc.cshtml
~/Views/Sth/abc.vbhtml
~/Views/Shared/abc.cshtml
~/Views/Shared/abc.vbhtml
Почему я не могу передать простую строку в качестве модели?
Да, если вы используете правую перегрузку:
return View("~/Views/Sth/Sth.cshtml" /* view name*/,
null /* master name */,
"abc" /* model */);
Если вы используете именованные параметры, вы можете пропустить необходимость дать первый параметр вообще
return View(model:"abc");
или
return View(viewName:"~/Views/Sth/Sth.cshtml", model:"abc");
также будет служить цели.
Вы имели в виду эту перегрузку View
:
protected internal ViewResult View(string viewName, Object model)
MVC путается этой перегрузкой:
protected internal ViewResult View(string viewName, string masterName)
Используйте эту перегрузку:
protected internal virtual ViewResult View(string viewName, string masterName,
Object model)
Таким образом:
return View("~/Views/Sth/Sth.cshtml", null , "abc");
Кстати, вы могли бы просто использовать это:
return View("Sth", null, "abc");
Он также работает, если вы объявляете строку как объект:
object str = "abc";
return View(str);
Или:
return View("abc" as object);
Он также работает, если вы передаете значение null для первых двух параметров:
return View(null, null, "abc");