MVC5如何从partialview发帖?

时间:2016-12-23 16:33:38

标签: asp.net-mvc partial-views

我的部分观点:

@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 - 未找到。是否可以从不同的控制器调用操作?它在部分视图中的原因是因为我使用了两个不同的模型+我将在多个其他视图中使用部分视图(至少一次我可以使用它)。

2 个答案:

答案 0 :(得分:2)

您的控制器名称错误。

替换

@using (Html.BeginForm("SelectGroup", "~/Controllers/WerkvormController"))

@using (Html.BeginForm("SelectGroup", "Werkvorm"))

如果您在浏览器中查看源代码,则可以验证实际的帖子URL,或者在浏览器的开发工具中查看网络选项卡。

答案 1 :(得分:2)

do.call(c, Map(function(x,y) lapply(x, function(dat) merge(dat, y, all.y = TRUE)), split(data_list, rep(seq_along(vec), vec)), data_list1)) 方法的第二个参数只是控制器的名称,而不是其文件:

BeginForm()

您可以从任何地方发布到任何服务器端操作。根据视图的呈现方式没有限制,因为一旦呈现所有内容,无论它来自何处,它都只是客户端标记。

作为学习练习,请在浏览器的调试工具中检查实际呈现的标记,并查看为表单创建的URL。无论部分视图如何排列,哪个控制器返回视图,模型是什么等等......最后只是HTML。您甚至可以手动编写一个带有表单的简单@using (Html.BeginForm("SelectGroup", "Werkvorm")) { } 文件,该文件成功发布到服务器端的ASP.NET MVC操作。