在我的第一個MVC 4應用程序上工作,我的登錄屏幕出現問題。這是一個內部網應用程序,適用於在生產車間使用普通PC的公司,因此他們需要能夠以個人身份登錄應用程序。 (該網站也在jQuery手機,並有一個JavaScript觸摸鍵盤,但我不認爲他們需要參與這個問題)回發後調用登錄屏幕javascript?
問題是,如果有人未能登錄,設置它的JavaScript代碼以便在用戶名字段中輸入按鍵將焦點發送到密碼字段停止工作。
我有一個黑客工程,(使用setTimeout,100),但它讓我感到噁心和骯髒。
這裏是我的登錄表單:
@ModelType FAToolAdmin.LogOnModel
@Code
ViewData("Title") = "Log In"
End Code
@Using Html.BeginForm()
@<div class="content-primary">
<div data-role="header" data-position="fixed" data-theme="b">
<h2>Account Info</h2>
</div>
<fieldset>
<div class="editor-label">
@Html.LabelFor(Function(m) m.UserName)
</div>
<div class="editor-field">
@Html.EditorFor(Function(m) m.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(Function(m) m.Password)
</div>
<div class="editor-field">
@Html.EditorFor(Function(m) m.Password)
</div>
<p>
<input type="submit" value="Log In" class="notfocus"/>
</p>
@* This Html.ValidationSummary will show a ul element containing any login errors that were returned.
The call here has been edited to send an empty string, because sending 2 lines of text regarding
a login failure is a little excessive. You failed to login. Type everything again and move on
with your day.*@
@Html.ValidationSummary(True, "")
</fieldset>
</div>
End Using
<script type="text/javascript">
//This is the script that adds the keyboards to the screen.
$(function() {
//setTimeout(function() {
//This is the script that makes it so that when the enter button is pressed on the screen that the
//focus is changed to the password box (rather than having the form be submitted).
// set the focus to the UserName field and select all contents
$('#UserName').focus().select();
// bind the keypress event on the UserName field to this little piece of code here
var $inp = $('#UserName');
$inp.bind('keydown', function (e) {
var key = e.which;
// if this is keycode 13 (enter), then prevent the default form behavior and change focus to the Password box.
if (key == 13) {
e.preventDefault();
// find the Password input box and set the focus to it.
$('#Password').focus();
}
});
//}, 100);
});
</script>
,這裏是我的控制器:
Imports System.Diagnostics.CodeAnalysis
Imports System.Security.Principal
Imports System.Web.Routing
Public Class AccountController
Inherits System.Web.Mvc.Controller
' GET: /Account/LogOn
<AllowAnonymous()>
Public Function LogOn() As ActionResult
Dim model As New LogOnModel
Return View(model)
End Function
'
' POST: /Account/LogOn
<AllowAnonymous()>
<HttpPost()>
Public Function LogOn(ByVal model As LogOnModel, ByVal returnUrl As String) As ActionResult
Try
If ModelState.IsValid Then
If Membership.ValidateUser(model.UserName, model.Password) Then
FormsAuthentication.SetAuthCookie(model.UserName, False)
If Url.IsLocalUrl(returnUrl) AndAlso returnUrl.Length > 1 AndAlso returnUrl.StartsWith("/") _
AndAlso Not returnUrl.StartsWith("//") AndAlso Not returnUrl.StartsWith("/\\") Then
Return Redirect(returnUrl)
Else
Return RedirectToAction("Index", "Home")
End If
Else
ModelState.AddModelError("", "The user name or password provided is incorrect.")
End If
Else
' if you just click on login without ever having entered anything into the username and password fields, you'll get this message.
ModelState.AddModelError("", "Please enter a valid user name and password.")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
' If we got this far, something failed, redisplay form
Return View(model)
End Function
'
' GET: /Account/LogOff
<AllowAnonymous()>
Public Function LogOff() As ActionResult
FormsAuthentication.SignOut()
Session.Abandon()
Return (RedirectToAction("Index", "Home"))
End Function
End Class
和型號:
Public Class LogOnModel
<Required()> _
<Display(Name:="SomeCompany Username")> _
Public Property UserName() As String
<Required()> _
<DataType(DataType.Password)> _
<Display(Name:="Password")> _
Public Property Password() As String
End Class
所以我的問題是,我該如何得到它成立因此,輸入錯誤用戶名的用戶(因此觸發了ModelState.AddModelError
和Return View(model)
)被髮回到輸入新聞腳本已被加載的頁面的版本?
我覺得我錯過了一些基本的東西。感謝任何人可以給的幫助。否則,它是setTimeout
。 〜Ed
這引起了它 - 感謝!用'@Using Html.BeginForm(「LogOn」,「Account」,Nothing,FormMethod.Post,New With {.data_ajax =「false」})替換'@Using Html.BeginForm()'',現在一切都表現得很好。 – edhubbell