Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在asp.net MVC中使用href从javascript在新窗口中打开窗口_Javascript_Ajax_Asp.net Mvc_Asp.net Web Api_Href - Fatal编程技术网

如何在asp.net MVC中使用href从javascript在新窗口中打开窗口

如何在asp.net MVC中使用href从javascript在新窗口中打开窗口,javascript,ajax,asp.net-mvc,asp.net-web-api,href,Javascript,Ajax,Asp.net Mvc,Asp.net Web Api,Href,我有以下代码,其中我从asp.net MVC视图打开一个外部url链接 现在我必须在打开链接时添加一个条目。 我的想法是,我应该通过一些javascript函数来实现,该函数将调用ajax调用我的WebAPI控制器,然后打开url的新窗口 @{ var token = Session["SecurityToken"] as AppSecurityToken; if (token != null && token.Claims !=

我有以下代码,其中我从asp.net MVC视图打开一个外部url链接

现在我必须在打开链接时添加一个条目。 我的想法是,我应该通过一些javascript函数来实现,该函数将调用ajax调用我的WebAPI控制器,然后打开url的新窗口

 @{
            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>       

我不明白你想要实现什么,也不明白为什么?在a href上单击调用web api,然后打开链接什么web api?你怎么称呼它?你使用图书馆吗?它返回什么?如果您需要有关调用API的方法的帮助,请向我们提供有关您尝试实现的更多信息。我认为这是最好的方法。使用a标记来实现它的设计目的是保持代码可读性的最佳方法。很高兴我帮了忙:-