如何在部分页面中设置动态控制器名称

时间:2016-05-13 04:37:51

标签: c# asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-5

我有一个部分页面,它使用两个View页面不同的控制器,但有相同的Edit Action方法。我需要在运行时为特定页面动态设置控制器名称。我怎么能这样做?

我在共享文件夹中的部分网页_SearchProduct仅适用于WomanController操作方法Edit

<div class="row">
    <div class="col-md-6">
        @using (Html.BeginForm("Edit", "Woman", FormMethod.Get))
        {
            <p>
                Find by Product Id : @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
                <input type="submit" value="Search" />
            </p>
        }
    </div>
    <div class="col-md-6">


        <span style="color:green">@ViewBag.ProductName </span>
    </div>
    <span style="color:red"> @ViewBag.FindResult </span>
</div>

我的WomanController编辑页面:

   @model MKL.Models.WomanProduct

<hr />
@Html.Partial("~/Views/Shared/_SearchProduct.cshtml")
<hr />
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">

        @Html.ValidationSummary(true)
        @Html.HiddenFor(model => model.WomanProductId)

        @if (ViewBag.ProductId != null)
        {

            @Html.Hidden("ProductId", (int)ViewBag.ProductId)
        }

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>


    </div>
}

我的ManController编辑页面:

      @model MKL.Models.ManProduct

<hr />
@Html.Partial("~/Views/Shared/_SearchProduct.cshtml")
<hr />
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">

        @Html.ValidationSummary(true)
        @Html.HiddenFor(model => model.ManProductProductId)

        @if (ViewBag.ProductId != null)
        {

            @Html.Hidden("ProductId", (int)ViewBag.ProductId)
        }

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>


    </div>
}

因此需要动态设置部分视图控制器名称ManWoman

 @using (Html.BeginForm("Edit", "", FormMethod.Get)){}

3 个答案:

答案 0 :(得分:2)

您可以将模型传递给部分控制器:

<form>

@Html.Partial("~/Views/Shared/_SearchProduct.cshtml", Model) 中,_SearchProduct.cshtml的类型为ModelWomanProduct,具体取决于调用ManProduct的视图。然后,根据型号类型选择控制器:

Partial

答案 1 :(得分:1)

好吧,我建议您使用@Html.Action呈现partialview。请考虑以下示例。

@Html.Action("GetSearchPartial", "Controller", new {controller = "Women"}) 
//in the Women Edit View

@Html.Action("GetSearchPartial", "Controller", new {controller = "Man"}) 
//in the Man Edit View

现在写一个action,返回ParialViewResult

public PartialViewResult GetSearchPartial(string controller)
{
    ViewBag.Controller=controller;
    return PartialView("_SearchProduct");
} 

_SearchProduct - PartialView获取ViewBag数据并将其指定为controller

@{
     string controller=ViewBag.Controller;
}
<div class="row">
    <div class="col-md-6">
        @using (Html.BeginForm("Edit", controller, FormMethod.Get))
        {
            <p>
                Find by Product Id : @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
                <input type="submit" value="Search" />
            </p>
        }
    </div>
    <div class="col-md-6">


        <span style="color:green">@ViewBag.ProductName </span>
    </div>
    <span style="color:red"> @ViewBag.FindResult </span>
</div>

让我们知道您是否面临任何问题

答案 2 :(得分:1)

试试这种方式

@using (Html.BeginForm("Edit", @HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString(), FormMethod.Get)){}

而不是局部视图的实际位置。所以动态设置ManWoman控制器名称