如何从MVC中的Partial View获取模型

时间:2014-12-10 16:39:47

标签: ajax model-view-controller controller

我有一个主索引视图,我从中调用名为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。

这是可以接受的,小部件类型的数量不会改变,但事实并非如此。 有没有办法从局部视图中获取某种特定模型,并知道/找出它是哪一个,或者我是以完全错误的方式做这个?

2 个答案:

答案 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

还有其他一些链接有更多资源。