我能阻止视图中的c#代码在表单发布时重定向吗?

本文关键字:表单 布时 重定向 代码 视图 | 更新日期: 2023-09-27 18:06:38

我有一个局部视图,可以从我的网站上的任何地方调用。当用户点击Partial View中的submit按钮时,发送邮件。用户没有被要求提供任何信息,因为这已经包含在我的Model中。c#代码在我的Partial View而不是我的Controller中,因为我需要传递Model(其中包含几个arrays)作为参数,但没有成功。当用户单击该按钮时,提交表单并发送邮件,但随后将用户重定向到Partial View的地址,而不是显示Partial View的原始View的地址。如何防止这种重定向?

例如,如果PartialView.cshtml/Home/View/加载,我在post上被重定向到/Home/PartialView

PartialView。在JQuery中通过Ajax post从HomeController.cs加载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....
    }
}

之前我有以下内容,但是控制器接收到的模型中的数据总是null。(不是问题的一部分,但如果有人问为什么我的代码不在我的控制器):

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....
}

我能阻止视图中的c#代码在表单发布时重定向吗?

你返回的是分部视图,所以它当然会重定向到分部视图:

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