我可以阻止视图中的C#代码重定向到表单帖子吗?

时间:2015-08-06 14:45:36

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

我有一个部分视图,可以在我的网站上的任何地方调用。当用户点击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....
}

1 个答案:

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