我有一个部分页面,它使用两个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>
}
因此需要动态设置部分视图控制器名称Man
和Woman
@using (Html.BeginForm("Edit", "", FormMethod.Get)){}
答案 0 :(得分:2)
您可以将模型传递给部分控制器:
<form>
在@Html.Partial("~/Views/Shared/_SearchProduct.cshtml", Model)
中,_SearchProduct.cshtml
的类型为Model
或WomanProduct
,具体取决于调用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)){}
而不是局部视图的实际位置。所以动态设置Man
或Woman
控制器名称