Created
August 23, 2018 20:57
-
-
Save KalinovDmitri/da7c39401f10e8bfea600ccd6716f735 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@using NetMvcExample.Models | |
@model LoginViewModel | |
<style type="text/css"> | |
.margin-top-2 { | |
margin-top: 2vh; | |
} | |
</style> | |
<div id="form-placeholder"> | |
@using (Ajax.BeginForm("Login", "Account", new { }, new AjaxOptions | |
{ | |
HttpMethod = "POST", | |
OnBegin = "loginStarted", | |
OnSuccess = "loginSuccess", | |
OnFailure = "loginFailed", | |
InsertionMode = InsertionMode.Replace, | |
UpdateTargetId = "login_form_container" | |
}, new { @id = "loginForm" })) | |
{ | |
@Html.ValidationSummary(true, null, new { @class = "alert alert-danger" }) | |
<div class="row"> | |
<div class="col-md-12"> | |
<div class="row margin-top-2"> | |
<div class="col-md-2"> | |
<span>User Name:</span> | |
</div> | |
<div class="col-md-8"> | |
@Html.TextBoxFor(m => m.UserName, new { @class = "k-textbox" }) | |
@Html.ValidationMessageFor(m => m.UserName) | |
</div> | |
</div> | |
<div class="row margin-top-2"> | |
<div class="col-md-2"> | |
<span>Password:</span> | |
</div> | |
<div class="col-md-8"> | |
@Html.PasswordFor(m => m.Password, new { @class = "k-textbox" }) | |
@Html.ValidationMessageFor(m => m.Password) | |
</div> | |
</div> | |
<div class="row margin-top-2"> | |
<div class="col-md-2"> | |
<span>Message:</span> | |
</div> | |
<div class="col-md-8"> | |
@Html.TextAreaFor(m => m.Message, new { @class = "k-textbox", rows = "5", cols = "30" }) | |
@Html.ValidationMessageFor(m => m.Message) | |
</div> | |
</div> | |
<div class="row margin-top-2"> | |
<div class="col-md-2"> | |
<button type="submit" class="btn btn-primary pull-left">Отправить</button> | |
</div> | |
</div> | |
</div> | |
</div> | |
} | |
<script type="text/javascript"> | |
$(document).ready(function () { | |
var loginForm = $("#loginForm"); | |
loginForm.on("submit", function (e) { | |
e.stopImmediatePropagation(); | |
e.preventDefault(); | |
var validator = loginForm.validate(); | |
if (!validator.form()) { | |
validator.destroy(); | |
return; | |
} else { | |
validator.destroy(); | |
} | |
$.ajax({ | |
url: e.target.getAttribute("action"), | |
method: e.target.getAttribute("method"), | |
contentType: "application/x-www-form-urlencoded", | |
data: loginForm.serialize(), | |
type: "json", | |
beforeSend: function (xhr) { | |
xhr.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); | |
}, | |
success: function (data, status, xhr) { | |
console.log(xhr.responseText); | |
$("#login_form_container").replaceWith(xhr.responseText); | |
}, | |
error: function (xhr, error) { | |
console.log(xhr.responseText); | |
if (xhr) { | |
if (xhr.status === 302) { | |
window.location.href = xhr.responseText; | |
} | |
} | |
} | |
}); | |
}); | |
}); | |
</script> | |
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Net; | |
using System.Threading.Tasks; | |
using System.Web.Mvc; | |
using NetMvcExample.Models; | |
namespace NetMvcExample.Controllers | |
{ | |
public class AccountController : Controller | |
{ | |
[HttpGet] | |
public ActionResult Login() | |
{ | |
return View(new LoginViewModel()); | |
} | |
[HttpPost] | |
public async Task<ActionResult> Login(LoginViewModel viewModel) | |
{ | |
if (!ModelState.IsValid) | |
{ | |
return PartialView(viewModel); | |
} | |
await Task.Delay(2000).ConfigureAwait(false); // emulate long work | |
return new CustomStatusCodeResult(HttpStatusCode.Redirect, Url.Action("Index", "Home")); | |
} | |
private ActionResult BadRequest(ModelStateDictionary modelState) | |
{ | |
var errors = modelState.Values | |
.Where(x => x.Errors.Count > 0) | |
.SelectMany(x => x.Errors) | |
.Select(x => x.ErrorMessage); | |
var errorsText = string.Join("\r\n", errors); | |
return new CustomStatusCodeResult(HttpStatusCode.BadRequest, errorsText); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Net; | |
namespace System.Web.Mvc | |
{ | |
public class CustomStatusCodeResult : HttpStatusCodeResult | |
{ | |
private readonly string _content; | |
public CustomStatusCodeResult(HttpStatusCode statusCode, string content) : base(statusCode) | |
{ | |
_content = content; | |
} | |
public override void ExecuteResult(ControllerContext context) | |
{ | |
base.ExecuteResult(context); | |
context.HttpContext.Response.Write(_content); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@using NetMvcExample.Models | |
@model LoginViewModel | |
<div id="login_form_container"> | |
@Html.Partial("_LoginForm", Model) | |
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.ComponentModel.DataAnnotations; | |
namespace NetMvcExample.Models | |
{ | |
public class LoginViewModel | |
{ | |
[Required] | |
[DataType(DataType.Text)] | |
public string UserName { get; set; } | |
[Required] | |
[DataType(DataType.Password)] | |
public string Password { get; set; } | |
[Required] | |
[DataType(DataType.Text)] | |
public string Message { get; set; } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment