2014-09-10 101 views
1

我試圖通過jquery獲取輸入到文本框的值,並將其從我的登錄視圖傳遞到我的索引視圖以顯示用戶名。我試圖用波紋管,但沒有顯示。MVC將數據從視圖傳遞到視圖

這怎麼辦?以及推薦的方法是什麼?

登錄:

<script> 
$("#loginbutton").click(function() { 
    var username = ($("#username").val()); 
    ViewBag.Usersname = username; 
}); 
</script> 

<body> 
<form action="CheckUser" method="post" class="form-horizontal col-md-6 col-md-offset-4"> 
<h1>Welcome to the Report Login</h1><br /> 

    <label class="control-label">Username or Email:</label><br /> 
    <input type="text" class="form-control" name="username"> <br /> 

    <label class="control-label">Password:</label><br /> 
    <input type="password" class="form-control" name="password"> <br /> 

    <input type="checkbox" name="remember" value="rememberme" /> Remember me <br /> 
    <a href="@Url.Action("ForgotPassword", "Home")" class="elements"><span>Forgot Password?</span></a><br /> 

    <div class="col-md-7 text-center"> 
     <button type="submit" class="btn btn-success" id="loginbutton">Log In</button> 
    </div> 
</form> 
</body> 

索引包含:

@ViewBag.Usersname 
+0

你使用的是提供的登錄API嗎?如果是這樣,你可以使用'User.Identity.Name'無論你想要 – 2014-09-10 09:46:17

+0

嗨安德烈,不怕我用我自己的解決方案瞭解更多的MVC。 :) – Baggerz 2014-09-10 10:10:19

+0

那麼,首先,這行'ViewBag.Usersname = username;'不起作用。您需要記住,您可以使用Razor在頁面生成時設置客戶端變量_,但不能使用JavaScript來設置服務器端變量。使用'ViewBag'是通常的方式,但是這需要在控制器中設置。在正確登錄用戶之後,在「ViewBag」中設置其名稱。請記住,沒有雙向綁定,因此無論客戶端的變量發生什麼變化,都不會反映到服務器上(除非使用HTTP請求發送值)。 – 2014-09-10 10:23:12

回答

1

登錄視圖: - 實例

<script> 

function setCookie(cname,cvalue,exdays) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (exdays*24*60*60*1000)); 
    var expires = "expires=" + d.toGMTString(); 
    document.cookie = cname+"="+cvalue+"; "+expires; 
} 

function SetCookieFromModel() { 
     user = @ViewBag.Usersname 
     if (user != "" && user != null) { 
      setCookie("username", user, 30); 
     } 
} 

</script> 

索引視圖: -

<script> 
function getCookie(cname) { 
    var name = cname + "="; 
    var ca = document.cookie.split(';'); 
    for(var i=0; i<ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1); 
     if (c.indexOf(name) != -1) { 
      return c.substring(name.length, c.length); 
     } 
    } 
    return ""; 
} 
function GetCookieFromModel() { 
var user=getCookie("username"); 
} 
</script> 

第二種方法在MVC中使用TempData在這裏我做了一個簡單的例子。在這裏,我在第二個視圖中獲得了員工ID。根據該

型號 模擬你的例子:

public class Information 
    { 

     public string EmpId { get; set; } 

    } 

控制器:

public class EmpController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     }  
     [HttpPost] 
     public ActionResult Index(Information ifn ,string info) 
     { 

      var getInfo = ifn.EmpId; 
      TempData["EmployeeInformation"] = getInfo; 

      return RedirectToAction("ShowEmployee"); 
     }   
     public ActionResult ShowEmployee() 
     { 
      return View();    
     } 
    } 

查看索引:

<div> 
     @using (Html.BeginForm()) { 
       @Html.LabelFor(m => m.EmpId) 
       @Html.TextBoxFor(m => m.EmpId)    
     } 
    </div> 

第二信息查看ShowEmployee:

<div> 
    your info : @TempData["EmployeeInformation"] 

    </div> 
0

有一個簡單的解決方案的所有你需要做的是設置一個cookie,並從控制器讀取它

(function() { 
    var onLoginClick = function() { 
     var userName = $('txtUserName').val(); 
     $.ajax({ 
      url: '@Url.Content("~/Login")', 
      dataType: 'json', 
      async: false, 
      data: { 
       userName: userName 
      } 
     }); 
    } 
}()) 

在您登錄控制器動作需要設置cookie

HttpCookie loginCookie = new HttpCookie("loginCookie"); 
Response.Cookies["loginCookie"].Value = userName; 
Response.Cookies.Add(loginCookie); 

然後指數對任何控制器進行操作,您可以檢查cookie並設置它。

HttpCookie cookieUser= Request.Cookies["loginCookie"]; 
ViewBag.Username = Server.HtmlEncode(cookieUser.Value); 
+0

嗨加寧感謝您的迴應,我已將您的代碼添加到我的項目中。我的Login.cshtml中的JQuery,公共ActionResult Login()中的Cookie部分以及公共ActionResult Index中的最後一部分與我的index.cshtml頁面中相應的viewbag.username。 我唯一的問題是[「loginCookie」]。Value = userName; 用戶名在當前上下文中不存在。我錯過了什麼嗎? – Baggerz 2014-09-10 16:29:43

+0

是的,你必須把它作爲'public ActionResult Login(string userName){}'這樣的動作參數。 – Gayan 2014-09-11 04:23:14

相關問題