Ответ 1
- Нет ограничений, и это не считается плохой практикой.
-
У вас есть опечатка в части
PartialView("~/Views/BasicInfo/_Index.chtml")
вашего вопроса.Вы должны написать
return PartialView("~/Views/BasicInfo/_Index.cshtml")
Я хочу использовать ajax для предотвращения обновления моих страниц, и для этого хочу вернуть Представления PartialView из контроллера при вызове ajax.
Вопросы:
View
как PartialView
?PartialView
в Controller
?Например, для представления _Index в пути Views/BasicInfo/_Index я пытаюсь PartialView("~/Views/BasicInfo/_Index");
,
PartialView("~/Views/BasicInfo/_Index.chtml");
, PartialView("BasicInfo/_Index");
, и получить ошибку, поскольку не найден вид
ИЗМЕНИТЬ
Как указано имя представления в PartialView, если представление находится в папке из общей папки и из связанной папки просмотра. Например, мой контроллер - это имя controller1, и мой вид находится в этом пути Views/BasicInfo/_Index?
У вас есть опечатка в части PartialView("~/Views/BasicInfo/_Index.chtml")
вашего вопроса.
Вы должны написать return PartialView("~/Views/BasicInfo/_Index.cshtml")
Вы должны иметь это
MyController
представления
Где:
Index.cshtml как полное представление будет отображать частичный вид с переданной моделью (почему так? для предотвращения дублирования кода)
@model YourModelType
@{
ViewBag.Title = "View Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@Html.Partial("IndexPartial", Model)
IndexPartial.cshtml - это частичный вид, что-то вроде
@model YourModelType
<h2>Some Title</h2>
<div>
<h4>YourModel</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.Property1)
</dt>
<dd>
@Html.DisplayFor(model => model.Property1)
</dd>
<dt>
@Html.DisplayNameFor(model => model.Property2)
</dt>
<dd>
@Html.DisplayFor(model => model.Property2)
</dd>
</dl>
Теперь, когда вы хотите, чтобы Full View использовал MyController/Index, и если вы хотите Partial View, вы можете получить его с помощью MyController/IndexPartial
Или вы можете использовать параметр для вашего действия для указания результата:
public ActionResult GetMyView(bool? partial)
{
var model = something;
if (partial != null && partial)
{
return PartialView("MyViewPartial", model)
}
return View("MyView", model);
}
вызвать partial = yourHost/controller/GetMyView? partial = true
Теперь вернемся к вашему вопросу, да, вы можете вернуть Partial View как View и наоборот. Но вы столкнетесь с проблемами в добавленном html на страницы через ajax (неполный или перегруженный html).
вы можете использовать:
public PartialViewResult ActionMethodName()
{
return PartialView("_Index.chtml");
}
ИЛИ
public ActionResult ActionMethodName()
{
return PartialView("_Index.chtml");
}
Да., Его лучшие практики для возврата в виде частичного просмотра без загрузки страницы.
return PartialView("YourPartialView", model)
иначе вы можете использовать абсолютный путь
return PartialView("~/Views/AnotherFolder/YourPartialView", model)
Это то, что я понял по вашему вопросу: у вас есть имя контроллера Controller1, у которого есть ActionResult someMethod() и другой контроллер BasicInfo, который имеет PartialView BasicInfo_Index, и вы хотите вернуть частичный вид BasicInfo_Index из someMethod():
Можно использовать следующий код в someMethod(), чтобы получить частичное представление контроллера BasicInfo:
var DesirePartialView = ViewEngines.Engines.FindPartialView(ControllerContext, "BasicInfo_Index");
return PartialView(DesirePartialView.View);
Или Вы можете использовать RedirectToAction() для переадресации в метод действий в контроллере BasicInfo, который возвращает указанное partialview
Каков тип возврата метода, который вы вызываете в контроллере из ajax? Это должно быть что-то вроде:
public PartialViewResult LoadPartialView()
{
return PartialView("~/Views/BasicInfo/_Index.chtml");
}