我有一个部分视图,可以在我的网站上的任何地方调用。当用户点击submit
中的Partial View
按钮时,会发送一封电子邮件。系统不会要求用户提供任何信息,因为这已包含在Model
中。 C#代码位于我的Partial View
而不是我的Controller
,因为我需要将Model
(其中包含多个arrays
)作为参数传递,但这样做不成功。当用户单击该按钮时,表单提交并发送邮件,然后用户被重定向到Partial View
的地址,而不是View
的原始地址Partial View
显示。如何防止此重定向?
例如,如果从PartialView.cshtml
加载/Home/View/
,我会在帖子上重定向到/Home/PartialView
。
通过JQuery中的Ajax帖子从HomeController.cs加载的PartialView.cshtml
[HttpPost]
public ActionResult PartialView()
{
....create myModel....
return PartialView(myModel);
}
PartialView.cshtml
@using (Html.BeginForm()) {
<input type="submit" value="email" />
}
...rest of partial view...
@{
if (IsPost){
....sends email using data in model....
}
}
以前我有以下内容,但控制器收到的模型中的数据始终为空。 (不是问题的一部分,但如果有人问为什么我的代码不在我的控制器中):
PartialView.cshtml
@using (Html.BeginForm("sendMail", "Home", FormMethod.Post, new { myModel = Model }))
{
@Html.HiddenFor(a => a.firstArray);
@Html.HiddenFor(a => a.secondArray);
<input type="submit" value="email" />
}
HomeController.cs
[HttpPost]
public void sendMail(myModelType myModel )
{
....send email using data in model....
}
答案 0 :(得分:0)
嗯,你要返回局部视图,所以当然它会将你重定向到局部视图:
return PartialView(myModel);
相反,您希望获得父级,ParentActionViewContext可以获得父级。试试这个:
var controller = ControllerContext.ParentActionViewContext.RouteData.Values["Controller"] as string;
var action = ControllerContext.ParentActionViewContext.RouteData.Values["Action"] as string;
return View(action, controller);