我有一个主索引视图,我从中调用名为Create的视图,我将要创建的小部件类型传递给它。
索引视图:
<a href="@Url.Action("Create", "WidgetEditor", new { wType = "image" })"><i class="fa fa-image"></i> Create Image Widget</a> -
<a href="@Url.Action("Create", "WidgetEditor", new { wType = "text" })"><i class="fa fa-file-text"></i> Create Text Widget</a>
创建动作:
public ActionResult Create(string wType)
{
ViewBag.wType = wType;
return View();
}
然后通过ViewBag.wType将类型传递到视图中,并在“创建视图”
中进行评估创建视图:
@using (Html.BeginForm())
{
<section class="row">
@{
if (ViewBag.wType == "image")
{
Html.RenderPartial("~/Views/WidgetEditor/_CreateImageWidget.cshtml");
}
else if (ViewBag.wType == "text")
{
Html.RenderPartial("~/Views/WidgetEditor/_CreateTextWidget.cshtml");
}
}
</section>
}
并根据此情况加载适当的局部视图。 部分视图具有不同的模型,因此在提交表单时,我不知道如何传回哪个模型。来自_CreateImageWidget或_CreateTextWidget。
的那个如果HttpPost控制器看起来像这样
[HttpPost]
public ActionResult Create(DisplayWidgetImageViewModel imageModel, DisplayWidgetTextViewModel textModel)
{
return new ViewResult();
}
如果选择了_CreateImageWidget partial,我将获得填充的imageModel,如果选择_CreateTextWidget partial,我将获得textMode。
这是可以接受的,小部件类型的数量不会改变,但事实并非如此。 有没有办法从局部视图中获取某种特定模型,并知道/找出它是哪一个,或者我是以完全错误的方式做这个?
答案 0 :(得分:1)
您可以在单页中创建多个表单。您还可以为每个部分使用不同的操作方法:
@using (Html.BeginForm("Action", "Controller")) {
Html.RenderPartial("~/Views/WidgetEditor/_CreateImageWidget.cshtml")
}
所有这一切都无需使用Ajax。
答案 1 :(得分:0)
我用这个答案来解决我的问题:determine-the-model-of-a-partial-view-from-the-controller-within-mvc
还有其他一些链接有更多资源。