【问题标题】:Redirect to currentpage and append querystring after form submit表单提交后重定向到当前页面并附加查询字符串
【发布时间】:2013-09-15 17:46:39
【问题描述】:

我希望从我的表面控制器中将当前查询字符串附加到重定向操作。我似乎找不到任何合适的方法来做到这一点。

发送表单的页面包含一个选项卡,通过将查询字符串附加到 url 来显示该选项卡。表单是从此选项卡提交的,我希望感谢消息显示在同一选项卡上。

查询字符串是#inquery

来自我的表面控制器:

[HttpPost]
public ActionResult HandleFormSubmit(InquiryFormModel model)
{
    if (!ModelState.IsValid)
    {
        return CurrentUmbracoPage();
    }

    // Mail date goes here...

    TempData["success"] = true;

    return RedirectToCurrentUmbracoPage();
}

正如您正确猜测的那样,我希望将 #inquery 附加到 RedirectToCurrentUmbracoPage() 方法返回的 URL。

谢谢!

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 razor umbraco


    【解决方案1】:

    在返回当前页面的地方,添加一个包含查询字符串的 viewbag 对象。将此字段存储在 HTML 中的隐藏输入中,并让您的客户端 javascript 对其进行测试,并将其附加到 URL(如果存在)。

    if (!ModelState.IsValid)
    {
        ViewBag.URLString = "stringhere"
        return CurrentUmbracoPage();
    }
    

    然后在您的 HTML 中。

    <input id="URLString" type="hidden" />
    

    在你的 javascript 中(如果你使用 jQuery)

    $(document).ready(function(){
        window.location.href += $("#URLString").val();
    });
    

    我还没有完全限定这段代码,所以它不会按原样工作,但它还有更多可以给你一个想法。

    【讨论】:

    • 谢谢。我现在没有时间看,但我会尽快回到主题!并感谢代码 sn-ps!顺便说一句,在有效的 ModelState 上重定向时,我还可以添加 ViewBag 吗?
    • 我想是的。但是,如果你不能,那么另一个选择是使用 ASP.NET Session 对象,并使用 Razor 或你在客户端标记中使用的任何其他东西在客户端代码中访问它,或者你可以访问 Session 变量使用 AJAX 调用。只是为您提供更多选择。
    • 我想知道是否有一个只使用服务器端逻辑而不使用javascript的解决方案?
    猜你喜欢
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 2014-07-12
    相关资源
    最近更新 更多