MVC5 如何从部分视图中执行 post?
MVC5 How to do a post from partialview?
我的局部视图:
@model Alina_2017.Models.DropDownModel
<h2>Groepen</h2>
<div>
<div>
@using (Html.BeginForm("SelectGroup", "~/Controllers/WerkvormController"))
{
@Html.DropDownListFor(x => x.selectedItem, new SelectList(ViewBag.groepen, "id", "Naam"), "Select", new { @class = "form-control" })
<input type="submit" id="zoekgroep" value="Zoeken" />
}
</div>
</div>
我的主要观点:
@model Alina_2017.Models.WerkvormModel
@{
ViewBag.Title = "Index";
}
@Html.Partial("~/Views/DropDown/Groepen.cshtml")
//More irrelevant html
我的控制器:
public ActionResult Index()
{
ViewBag.groep1 = convertWerkvorm(db.Werkvormens.Where(f => f.GroepenWerkvormID == 1).ToList());
ViewBag.groep2 = convertWerkvorm(db.Werkvormens.Where(f => f.GroepenWerkvormID == 2).ToList());
ViewBag.groep3 = convertWerkvorm(db.Werkvormens.Where(f => f.GroepenWerkvormID == 3).ToList());
setViewBags();
return View();
}
[HttpPost]
public ActionResult SelectGroup(DropDownModel model)
{
// the value is received in the controller.
var selectedItem = model.selectedItem;
Debug.WriteLine(selectedItem);
return View("Index");
}
我收到 HTTP 错误 404.0 - 未找到。是否可以从不同的控制器调用一个动作?它处于局部视图中的原因是因为我使用了两种不同的模型+我将在多个其他视图中使用局部视图(至少在我开始工作后)。
您的控制器名称错误。
替换
@using (Html.BeginForm("SelectGroup", "~/Controllers/WerkvormController"))
和
@using (Html.BeginForm("SelectGroup", "Werkvorm"))
如果您在浏览器中查看您的源代码,或者在浏览器的开发工具中检查网络选项卡,您可以验证实际 post URL。
BeginForm()
方法的第二个参数只是控制器的 名称,而不是它的文件:
@using (Html.BeginForm("SelectGroup", "Werkvorm"))
{
}
您可以从任何地方post 执行任何服务器端操作。没有基于视图呈现方式的限制,因为一旦呈现所有内容,无论它来自何处,它都只是客户端标记。
作为学习练习,检查浏览器调试工具中实际呈现的标记并查看为表单创建的 URL。不管partial view怎么排,哪个controller返回view,model是什么等等...到头来都是HTML。您甚至可以手动编写一个简单的 .html
文件,其中包含一个成功 post 到服务器端 ASP.NET MVC 操作的表单。
我的局部视图:
@model Alina_2017.Models.DropDownModel
<h2>Groepen</h2>
<div>
<div>
@using (Html.BeginForm("SelectGroup", "~/Controllers/WerkvormController"))
{
@Html.DropDownListFor(x => x.selectedItem, new SelectList(ViewBag.groepen, "id", "Naam"), "Select", new { @class = "form-control" })
<input type="submit" id="zoekgroep" value="Zoeken" />
}
</div>
</div>
我的主要观点:
@model Alina_2017.Models.WerkvormModel
@{
ViewBag.Title = "Index";
}
@Html.Partial("~/Views/DropDown/Groepen.cshtml")
//More irrelevant html
我的控制器:
public ActionResult Index()
{
ViewBag.groep1 = convertWerkvorm(db.Werkvormens.Where(f => f.GroepenWerkvormID == 1).ToList());
ViewBag.groep2 = convertWerkvorm(db.Werkvormens.Where(f => f.GroepenWerkvormID == 2).ToList());
ViewBag.groep3 = convertWerkvorm(db.Werkvormens.Where(f => f.GroepenWerkvormID == 3).ToList());
setViewBags();
return View();
}
[HttpPost]
public ActionResult SelectGroup(DropDownModel model)
{
// the value is received in the controller.
var selectedItem = model.selectedItem;
Debug.WriteLine(selectedItem);
return View("Index");
}
我收到 HTTP 错误 404.0 - 未找到。是否可以从不同的控制器调用一个动作?它处于局部视图中的原因是因为我使用了两种不同的模型+我将在多个其他视图中使用局部视图(至少在我开始工作后)。
您的控制器名称错误。
替换
@using (Html.BeginForm("SelectGroup", "~/Controllers/WerkvormController"))
和
@using (Html.BeginForm("SelectGroup", "Werkvorm"))
如果您在浏览器中查看您的源代码,或者在浏览器的开发工具中检查网络选项卡,您可以验证实际 post URL。
BeginForm()
方法的第二个参数只是控制器的 名称,而不是它的文件:
@using (Html.BeginForm("SelectGroup", "Werkvorm"))
{
}
您可以从任何地方post 执行任何服务器端操作。没有基于视图呈现方式的限制,因为一旦呈现所有内容,无论它来自何处,它都只是客户端标记。
作为学习练习,检查浏览器调试工具中实际呈现的标记并查看为表单创建的 URL。不管partial view怎么排,哪个controller返回view,model是什么等等...到头来都是HTML。您甚至可以手动编写一个简单的 .html
文件,其中包含一个成功 post 到服务器端 ASP.NET MVC 操作的表单。