2012-12-11 95 views
0

這可能是一個簡單的問題,我是一個新的蜜蜂:) 這裏是我查看代碼參數傳遞到控制器上的按鈕的點擊

<button type="button" id="btnLogin" onclick="location.href='<%: Url.Action("Authenticate", "Login") %>'" runat="server"></button> 

這裏是我的控制器代碼

public ActionResult Authenticate(string username,string password) 
    { 
     bool status = Login.Authenticate(username, password); 
     return View("Status", status); 
    } 

我可以去那個控制器,但我無法傳遞參數。可以讓我知道什麼是將參數傳遞給控制器​​功能的儀式方式。

完整視圖代碼

<table> 
    <tr> 
     <td> 
      <input type="text" id="txtUsername" runat="server" /> 
     </td> 
     <td> 
      <input type="text" id="txtPassword" runat="server" /> 
     </td> 
    </tr> 
    <tr> 
     <td colspan="2" align="center"> 
      <button type="button" id="btnLogin" onclick="location.href='<%: Url.Action("Authenticate", "Login") %>'" runat="server"></button> 
     </td> 
    </tr> 
</table> 
+0

能否請您複製完整的HTML表單在你的問題? – Gabriel

+0

@Gabriel更新plz看看 – iJade

+0

隨着當前的答案你到達那裏。我想添加的一件事是,如果您希望ASP.NET MVC綁定這些值,則需要輸入字段名稱來匹配控制器中的參數名稱。即''輸入類型=「文本」ID =「用戶名」名稱=「用戶名」/>'將符合'字符串用戶名' – Gabriel

回答

0

使用<form>該職位,在控制器的身份驗證方法。也改變了<button><input type="submit"

像這樣:

<form method="post" action="@Href("~/account/authenticate")" id="LogOnForm"> 
.... @*input boxes*@ 
<input type="submit" value="Login"/> 
</form> 

編輯:對於AJAX的登錄,使用這個腳本(需要jQuery的)。需要注意的是形式需要一個ID

<script type="text/javascript"> 
     $(document).ready(function() { 
      $("#LogOnForm").submit(function (event) { 
       event.preventDefault();     
       $.ajax({ 
        type: "POST", 
        url: '@Url.Content("~/account/authenticate")', 
        data: $("#LogOnForm").serialize(), 
        success: function (data) {      
         if (data.Status) { 
          //Logged in succesfully 
         } else { 
          //Login failed 
         } 
        }, 
        error: function (xhr, ajaxOptions, thrownError) {        
         console.log(xhr.responseText); 
        } 
       }); 
      }); 
     }); 

    </script> 

編輯:控制器修改:

public JsonResult Authenticate(string username,string password) 
    { 
     bool status = Login.Authenticate(username, password); 
     return Json(new @"Status", status); 
    } 
+0

以及我不想發佈的形式...有沒有辦法做到這一點我的方式 – iJade

+0

然後將'method ='post''更改爲'method =「get」'或者您可以使用Ajax – robasta

+0

如何使用AJAX.any有用的鏈接 – iJade

0

你可以通過輸入值與其name屬性。

<%using (Html.BeginForm("Authenticate", "Login")) 
{%> 
    <table> 
     <tr> 
      <td> 
       <input type="text" id="txtUsername" name="username" /> 
      </td> 
      <td> 
       <input type="text" id="txtPassword" name="password" /> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2" align="center"> 
       <input type="submit" value="Login" class="submit_button"/> 
      </td> 
     </tr> 
    </table> 
<%}%> 

控制器

[HttpPost] 
public ActionResult Authenticate(string username, string password) 
{ 
    bool status = Login.Authenticate(username, password); 
    return View("Status", status); 
} 
+0

只是複製粘貼我的代碼。 –

+0

如果你想用任何按鈕(沒有提交,也沒有表單)來做,你可以使用ajax post。 –

+0

我試過但我得到空參數 – iJade

0

您需要的參數爲使用Javascript

+0

你不'需要'使用JavaScript來做到這一點,這是一個選項。 – avb

+0

我仍然收到空參數。檢查在控制器操作中放置一個斷點 – iJade

+0

公平的評論。 「需要」可能是錯誤的詞,但我覺得它是最有效的方法。 –

0

缺少對您輸入的字段名稱屬性調用字符串。爲您的用戶名和密碼輸入框添加一個名稱屬性。 name屬性應該與您的動作控制器參數相同。

<table> 
    <tr> 
     <td> 
      <input type="text" id="txtUsername" runat="server" name="username" /> 
     </td> 
     <td> 
      <input type="text" id="txtPassword" runat="server" name="password"/> 
     </td> 
    </tr> 
    <tr> 
     <td colspan="2" align="center"> 
      <button type="button" id="btnLogin" onclick="location.href='<%: Url.Action("Authenticate", "Login") %>'" runat="server"></button> 
     </td> 
    </tr> 
</table> 
1

你知道有一個第三個參數的URL操作,您可以添加參數

@Url.Action("Authenticate", "Login" , new {name = "name"}) 

你只需要一個方式來增加你的價值有

相關問題