如何使用 asp.net MVC 中的 href 从 javascript 在新的 window 中打开 window
How to open open window in new window from javascript using href in asp.net MVC
我有以下代码,我从 asp.net MVC 视图打开外部 url link。
现在我必须在打开 link 时添加一个条目。
我的想法是我应该通过一些 javascript 函数来完成它,该函数将调用 ajax 调用我的网络 api 控制器,然后打开 [=25= 的新 window ]
@{
var token = Session["SecurityToken"] as AppSecurityToken;
if (token != null && token.Claims != null)
{
foreach (var claim in token.Claims)
{
if (!String.IsNullOrWhiteSpace(claim.Description))
{
string imagepathv = Url.Content("~/") + "images/" + claim.Name + ".png";
string hreftext = $"{claim.Description}?sessionid={token.SessionId}";
<li>
<a href="" onclick="UserNameAccess('@hreftext');">
<img src="@imagepathv" />
</a>
</li>
}
}
}
}
<script lang="javascript" type="text/javascript">
function UserNameAccess(input) {
window.open(input, "_blank");
var baseSiteUrl = '@ConfigurationManager.AppSettings["WebApiBaseUrl"]';
var request = { "email": "sadasd", "firstname": "asdasd", "lastname": "dasdasda" };
$.ajax({
type: "POST",
url: baseSiteUrl + "DataAccessApi/LogUserClaimAccesshistory",
data: JSON.stringify(request),
datatype: "text",
contentType: "application/json",
success: function (resultData) {
var responseJson = resultData;
if (responseJson.Success === true) {
alert("success");
}
else {
alert("error1");
}
},
failure: function (error) {
alert(error);
},
error: function (jqXhr, textStatus) {
if (textStatus === 'timeout') {
alert("Request Timeout");
//do something. Try again perhaps?
} else {
alert(jqXhr.statusText);
}
},
timeout: 30000 // sets timeout to 3 seconds
});
}
</script>
public class DataAccessController : ApiController
{
[Route("DataAccessApi/LogUserClaimAccesshistory")]
public MyJsonResponse LogUserClaimAccesshistory(UserClaimHistory request)
{
MyJsonResponse result = new MyJsonResponse();
return result;
}
}
public class MyJsonResponse
{
[JsonProperty]
public bool Success { get; set; }
[JsonProperty]
public string Message { get; set; }
[JsonProperty]
public string CustomInfo { get; set; }
}
public class UserClaimHistory
{
[JsonProperty("email")]
public string Email { get; set; }
[JsonProperty("firstname")]
public string FirstName { get; set; }
[JsonProperty("lastname")]
public string LastName { get; set; }
}
你为什么不使用下面的代码?让 a
标签做网页打开,而 JS 负责 API 调用。
更新答案:
@{
var token = Session["SecurityToken"] as AppSecurityToken;
if(token != null && token.Claims != null)
{
foreach(var claim in token.Claims)
{
if(!String.IsNullOrWhiteSpace(claim.Description))
{
string imagepathv = Url.Content("~/") + "images/" + claim.Name + ".png";
string hreftext = $"{claim.Description}?sessionid={token.SessionId}";
<li>
<!-- We use the <a> tag to handle the new page opening -->
<a href="@hreftext" onclick="UserNameAccess();" target="_blank">
<img src="@imagepathv"/>
</a>
</li>
}
}
}
}
<!-- The javascript completly ignores the new page, and only focus on the API call -->
<script lang="javascript" type="text/javascript">
function UserNameAccess()
{
var baseSiteUrl = '@ConfigurationManager.AppSettings["WebApiBaseUrl"]';
var request = { "email": "sadasd", "firstname": "asdasd", "lastname": "dasdasda" };
$.ajax({
type: "POST",
url: baseSiteUrl + "DataAccessApi/LogUserClaimAccesshistory",
data: JSON.stringify(request),
datatype: "text",
contentType: "application/json",
success: function(resultData)
{
var responseJson = resultData;
if (responseJson.Success === true)
{
alert("success");
} else
{
alert("error1");
}
},
failure: function(error)
{
alert(error);
},
error: function(jqXhr, textStatus)
{
if (textStatus === 'timeout')
{
alert("Request Timeout");
//do something. Try again perhaps?
} else
{
alert(jqXhr.statusText);
}
},
timeout: 30000 // sets timeout to 3 seconds
});
}
</script>
我有以下代码,我从 asp.net MVC 视图打开外部 url link。
现在我必须在打开 link 时添加一个条目。 我的想法是我应该通过一些 javascript 函数来完成它,该函数将调用 ajax 调用我的网络 api 控制器,然后打开 [=25= 的新 window ]
@{
var token = Session["SecurityToken"] as AppSecurityToken;
if (token != null && token.Claims != null)
{
foreach (var claim in token.Claims)
{
if (!String.IsNullOrWhiteSpace(claim.Description))
{
string imagepathv = Url.Content("~/") + "images/" + claim.Name + ".png";
string hreftext = $"{claim.Description}?sessionid={token.SessionId}";
<li>
<a href="" onclick="UserNameAccess('@hreftext');">
<img src="@imagepathv" />
</a>
</li>
}
}
}
}
<script lang="javascript" type="text/javascript">
function UserNameAccess(input) {
window.open(input, "_blank");
var baseSiteUrl = '@ConfigurationManager.AppSettings["WebApiBaseUrl"]';
var request = { "email": "sadasd", "firstname": "asdasd", "lastname": "dasdasda" };
$.ajax({
type: "POST",
url: baseSiteUrl + "DataAccessApi/LogUserClaimAccesshistory",
data: JSON.stringify(request),
datatype: "text",
contentType: "application/json",
success: function (resultData) {
var responseJson = resultData;
if (responseJson.Success === true) {
alert("success");
}
else {
alert("error1");
}
},
failure: function (error) {
alert(error);
},
error: function (jqXhr, textStatus) {
if (textStatus === 'timeout') {
alert("Request Timeout");
//do something. Try again perhaps?
} else {
alert(jqXhr.statusText);
}
},
timeout: 30000 // sets timeout to 3 seconds
});
}
</script>
public class DataAccessController : ApiController
{
[Route("DataAccessApi/LogUserClaimAccesshistory")]
public MyJsonResponse LogUserClaimAccesshistory(UserClaimHistory request)
{
MyJsonResponse result = new MyJsonResponse();
return result;
}
}
public class MyJsonResponse
{
[JsonProperty]
public bool Success { get; set; }
[JsonProperty]
public string Message { get; set; }
[JsonProperty]
public string CustomInfo { get; set; }
}
public class UserClaimHistory
{
[JsonProperty("email")]
public string Email { get; set; }
[JsonProperty("firstname")]
public string FirstName { get; set; }
[JsonProperty("lastname")]
public string LastName { get; set; }
}
你为什么不使用下面的代码?让 a
标签做网页打开,而 JS 负责 API 调用。
更新答案:
@{
var token = Session["SecurityToken"] as AppSecurityToken;
if(token != null && token.Claims != null)
{
foreach(var claim in token.Claims)
{
if(!String.IsNullOrWhiteSpace(claim.Description))
{
string imagepathv = Url.Content("~/") + "images/" + claim.Name + ".png";
string hreftext = $"{claim.Description}?sessionid={token.SessionId}";
<li>
<!-- We use the <a> tag to handle the new page opening -->
<a href="@hreftext" onclick="UserNameAccess();" target="_blank">
<img src="@imagepathv"/>
</a>
</li>
}
}
}
}
<!-- The javascript completly ignores the new page, and only focus on the API call -->
<script lang="javascript" type="text/javascript">
function UserNameAccess()
{
var baseSiteUrl = '@ConfigurationManager.AppSettings["WebApiBaseUrl"]';
var request = { "email": "sadasd", "firstname": "asdasd", "lastname": "dasdasda" };
$.ajax({
type: "POST",
url: baseSiteUrl + "DataAccessApi/LogUserClaimAccesshistory",
data: JSON.stringify(request),
datatype: "text",
contentType: "application/json",
success: function(resultData)
{
var responseJson = resultData;
if (responseJson.Success === true)
{
alert("success");
} else
{
alert("error1");
}
},
failure: function(error)
{
alert(error);
},
error: function(jqXhr, textStatus)
{
if (textStatus === 'timeout')
{
alert("Request Timeout");
//do something. Try again perhaps?
} else
{
alert(jqXhr.statusText);
}
},
timeout: 30000 // sets timeout to 3 seconds
});
}
</script>