gpt4 book ai didi

jquery - 网址.Action : Passing multiple variables

转载 作者:行者123 更新时间:2023-12-01 06:22:09 25 4
gpt4 key购买 nike

在阅读了其他一些线程之后,我们似乎需要在 Global.asax.cs 中映射一个新路由,以便传递多个变量。 (注意:如果只传递一个变量,效果很好)

但是,如果传递多个变量,第一个变量会通过,但第二个变量(以及之后的任何其他变量)不会通过 - 它们的值为 null。

作为示例,_Layout.cshtml 中的 url 值为 var url = '/Home/DidItWork?testUserName=James%20Bond&testEmail=james.bond%40gmail.com'; -- 应该由于 MapRoute 期望采用 Home/DidItWork/{testUserName}/{testEmail} 形式的内容,因此结果会有所不同?

对于为什么不传递多个变量的想法或建议?

Global.asax.cs

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"MyNewRoute", // Route name
"Home/DidItWork/{testUserName}/{testEmail}", // URL with parameters
new { controller = "Home", action = "DidItWork" } // Parameter defaults
);

routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}

HomeController.cs

public async Task<ActionResult> DidItWork(string testUserName, string testEmail)
{
var manager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var user = new ApplicationUser { UserName = "user name", Email = "username@gmail.com" };
var result = await manager.CreateAsync(user, "passwordGoesHere1!");
if (result.Succeeded)
{
await manager.SendEmailAsync(user.Id, testUserName, testEmail);

return View();
}
return View();
}

_Layout.cshtml

    @*script for someone who presses the send/email button*@ 
<script>
$("#sendButton").click(function () {
var htmlBody = $("#myModal .modal-body").text();
var url = '@Url.Action("DidItWork", "Home", new { testUserName = "James Bond", testEmail = "james.bond@gmail.com" })';
$.ajax({
url: url,
success: function (result) {
alert("Success. It worked." + htmlBody);
},
error: function (xhr, status, errorThrown) {
alert("Sorry, there was a problem! Error: " + errorThrown + ". Status: " + status + ". Console: " + xhr);
console.log("Hello");
console.log("Error: " + errorThrown);
console.log("Status: " + status);
console.dir(xhr);
console.log("Good-bye");
},
});
return false;
});
</script>

最佳答案

我怀疑是编码问题。有两种方法对 URL 进行编码:

  • HTML 编码:/Home/DidItWork?testUserName=James%20Bond&testEmail=james.bond%40gmail.com
  • 网址编码:/Home/DidItWork?testUserName=James%20Bond&testEmail=james.bond%40gmail.com

当您将 URL 传递到 Web 服务器时,应该对其进行 URL 编码,否则服务器将无法解释查询字符串中的 & 符号。

这可以解释为什么它只适用于一个变量,而不适用于两个变量。

更新

要创建不带编码的 URL 以供 JavaScript 使用,您需要将 Url.Action 的输出传递给 Html.Raw

var url = '@Html.Raw(Url.Action("DidItWork", "Home", new { testUserName = "James Bond", testEmail = "james.bond@gmail.com" }))';

关于jquery - 网址.Action : Passing multiple variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com