2014-09-10 103 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

相关问题