在动作之间传递参数ASP.NET CORE MVC

时间:2019-06-03 14:44:59

标签: javascript asp.net-core

我正在尝试将多个参数从操作A传递到操作B。

public IActionResult A(string name){ // some code }
public IActionResult B() { return RedirectToAction("A", new {name = "John" }); }

这很好。但是我想要实现的是这些参数不会显示在url中,因为当我确实喜欢上面的示例时,我的url看起来像http://myapp.com/users?name=John。我希望网址清晰无?然后是字符串。

我尝试使用TempData[],它在本地工作,但是当我将应用程序发布为Azure时,它无法工作。 尝试过ViewData[],但发现重定向后它变成空的。

我尝试使用javascript拆分url,但其中有一些不必要的重载。

是否可以通过javascript或.net或其他方式完成此操作? 谢谢

2 个答案:

答案 0 :(得分:0)

我不明白您为什么不喜欢在您的网址中使用...?name=John&p2=val2,而您的操作正在接受GET方法...

无论如何,如果您在同一控制器中,则可以编写此代码(这不是一个好习惯)

     public IActionResult A(string name){}
     public IActionResult B(){return A("world");}

使用TempData:在这里,您的问题将是 TempData[]无法在天蓝色上工作。所以您应该像这样设置Cookie同意

   services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => false;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

请记住,您必须清除浏览器导航数据(包括cookie),还必须接受应用程序来存储/收集cookie。

答案 1 :(得分:-1)

可能不是最好的方法,但可能是一个会话变量?然后在A中清除它。

public IActionResult A() {
    string name = (string) Session["AsNameFromB"];
    Session["AsNameFromB"] = null;

    //Set in view model if you are using one.
}

public IActionResult B() {
    Session["AsNameFromB"] = "John";
    return RedirectToAction("A");
}

您也可以发布数据而不是GET。