2017-09-21 6 views
0

私はasp.net MVCビューから外部URLリンクを開いています。asp.netのhrefを使用してjavascriptから新しいウィンドウを開く方法MVC

ここで、リンクを開くときにエントリを追加する必要があります。 私の思考は、私は私のウェブAPIコントローラにAJAX呼び出しを呼び出してから、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; } 
    } 
+1

*理由* ...:

は答えを更新しましたか? – Wndrr

+0

href click on web apiをクリックしてリンクを開きます –

+0

どのWeb APIですか?どうやってそれを呼びますか?あなたは図書館を使いますか?それは何を返すのですか? – Wndrr

答えて

1

なぜあなたは以下のコードを使用していないの新しいウィンドウが開きますいくつかのjavascript機能を経由してそれを行うべきであるということですか? aタグでWebページの公開を行い、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>  
関連する問題