ASP.NET MVC:在!ModelState.IsValid时找出方法的调用者

4
我在“CartController”上有一个名为AddtoCart的操作方法,返回一个ActionResult。我的问题是,我从另一个控制器向AddtoCart提交要添加的产品的Id,然后继续执行。我没有验证的问题;然而,当!ModelState.IsValid时,我想重定向到调用该Action的视图,但我不知道是谁调用了我(或在哪里找到它)。可能有几个不同的控制器会向该方法提交。在ViewData中是否有我可以使用的东西来查找调用我的Action方法的人?
3个回答

4
听起来你需要的是:
Request.UrlReferrer

如果你不确定,请告诉我。

祝好,
Charles


我尝试过那个方法,但它会返回实际的URL。如果在ModelState中出现错误,我不能只返回View(Request.UrlReferrer)。不过还是谢谢你! - Mike
你能把你的ModelState放到TempData里,然后重定向到Request.UrlReferrer吗?你从中发布并随后需要重定向的操作/视图肯定需要获取自己视图的数据/内容...是吧? - Charlino

0

我认为控制器不会进行发布。控制器接受请求(发布)并处理一些工作,检索数据,然后选择要呈现回浏览器的视图。

因此,您的操作方法通常是从Web浏览器(页面上的链接,JavaScript)调用的。这就是为什么我建议您向Action方法传递附加参数,然后基于该值选择适当的视图进行呈现。

public ActionResult AddToCart(int productID, string caller)
    {
        //add to cart logic

        switch (caller)
        {
            case "this":
                {
                    //get data for this view
                    return View("this");
                }
            case "that":
                {
                    //get data for that view
                    return View("that");
                }
            default:
                {
                    //get data for default view
                    return View("default");
                }
        }
    }

希望我理解您问题的本质是正确的...

0
我认为你想要的是这样的:

[...] 如果你不介意将你的代码绑定到特定的视图引擎上,你可以查看ViewContext.View属性并将其转换为WebFormView

var viewPath = ((WebFormView)ViewContext.View).ViewPath;

从一个关于如何在控制器方法内获取视图名称的相关问题中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接