我有一个包含用户名和密码以及代码的登录模型。
现在我想要如果你填写代码然后自动填写相关的用户名和密码。所以例如你填写代码:HD然后TAB然后用户名和密码的文本字段必须是填写。
动作方法如下所示:
[HttpPost]
public ActionResult LoginBalieUser(V_LoginModel_BalieUser model)
{
ISalesPersonProfile salesAgent99 = CommerceFrameworkBase.SalesPersons.GetSalesPerson("HD");
var salesAgent = CommerceFramework.ShopAccounts.GetShopAccount(Guid.Parse("3E90BB13-36BA-435D-8ED7-E930A4F8C758"), true);
if (model.BalieCode == salesAgent99.Id)
{
if (!ModelState.IsValid)
return View(model);
if (!ShopApi.UserState.Login(model.UserName, model.Password, model.RememberMe))
{
ModelState.AddModelError("","The username or password is incorrect" );
return View(model);
}
}
return RedirectToAction("Index", "Profile");
}
扩展模型如下所示:
public class V_LoginModel_BalieUser : LoginModel
{
public string BalieCode { get; set; }
}
,原始模型如下所示:
//
// Summary:
// A model to login into the webshop.
public class LoginModel
{
public LoginModel();
//
// Summary:
// Gets or sets the password.
[AllowHtml]
[DataType(DataType.Password)]
[Display(Name = "Password")]
[Required(ErrorMessageResourceName = "Validation_RequiredField")]
[StringLength(30, ErrorMessageResourceName = "Validation_MaxLengthExceeded")]
public virtual System.String Password { get; set; }
//
// Summary:
// Gets or sets a value indicating whether to remember the user to login him automatically
// on the next visit.
[Display(Name = "Login_RememberMe")]
public virtual System.Boolean RememberMe { get; set; }
//
// Summary:
// Gets or sets the username.
[DataType(DataType.EmailAddress, ErrorMessageResourceName = "Validation_InvalidField")]
[Display(Name = "EmailAddress")]
[Required(ErrorMessageResourceName = "Validation_RequiredField")]
[StringLength(80, ErrorMessageResourceName = "Validation_MaxLengthExceeded")]
[TrimAttribute(new[] { })]
public virtual System.String UserName { get; set; }
}
并且视图如下所示:
@{
Layout = LayoutPaths.General;
}
@model Sana.Commerce.DomainModel.Account.V_LoginModel_BalieUser
<div class="semicolumn">
<div class="form-holder">
@using (Html.BeginForm(htmlAttributes: new { @class = "form" }))
{
@Html.AntiForgeryToken()
<table>
<tr>
<th>
@Html.DisplayNameFor(modelItem => modelItem.BalieCode)
</th>
<th></th>
</tr>
<tr>
<td>
@Html.TextBoxFor(modelItem => modelItem.BalieCode)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(modelItem => modelItem.UserName)
</th>
<th></th>
</tr>
<tr>
<td>
@Html.TextBoxFor(modelItem => modelItem.UserName)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(modelItem => modelItem.Password)
</th>
<th></th>
</tr>
<tr>
<td>
@Html.TextBoxFor(modelItem => modelItem.Password)
</td>
</tr>
</table>
<div class="form-row">
<h4></h4>
<input type="submit" value="Login" />
</div>
}
</div>
<div>
</div>
</div>
@section Scripts{
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(document).ready(function(){
$("#Id").change(function () {
$.ajax({
type: "Get",
url: '@Url.Action("loginbalieUser", "profile")',
data: { id: $("").val() },
dataType: "json",
success: function (data) {
$("#UserName").val(data[0]);
$("#Password").val(data[1]);
}
});
})
});
</script>
}
所以我试着用Ajax调用。但确切的实现我不知道。
谢谢
这是以下模型:ISalesPersonProfile
//
// Summary:
// Interface for the Sales Person Profile entity.
public interface ISalesPersonProfile : IEntity
{
//
// Summary:
// Email of this Sales person.
string Email { get; set; }
//
// Summary:
// Sales person's code.
string Id { get; set; }
//
// Summary:
// Job Title of the Sales person.
string JobTitle { get; set; }
//
// Summary:
// Name of the Sales person.
string Name { get; set; }
//
// Summary:
// Phone number of the Sales person.
string Phone { get; set; }
//
// Summary:
// Gets or sets the related customer id list related with the sales person.
IList<string> RelatedCustomerIds { get; set; }
}
但是我收到了这个错误:
loginbalieUser:232 Uncaught ReferenceError: ValidateBalieCode is not defined
at HTMLInputElement.onchange (loginbalieUser:232) on this line: <tr>
<td>
@Html.TextBoxFor(modelItem => modelItem.BalieCode, new { @onchange = "ValidateBalieCode()" })
</td>
</tr>
这是我的ajax电话:
function ValidateBalieCode(){
var code = $('input#BalieCode').val();
$.ajax({
type: "Get",
url: '@Url.Action("ValidateBalieCode", "profile")',
data: { "BalieCode":code },
success: function (data) {
$("input#UserName").val(data.UserName);
$("input#Password").val(data.Password);
}
});
}
如果我在Goog chrome中加载页面:
我明白这一点:
function ValidateBalieCode(){
var code = $('input#BalieCode').val();
$.ajax({
type: "Get",
url: '/sitemap.xml',
data: { "BalieCode":code },
success: function (data) {
$("input#UserName").val(data.UserName);
$("input#Password").val(data.Password);
}
});
}
oke,
我现在就这样:
function ValidateBalieCode() {
var code = $('input#BalieCode').val();
$.ajax({
async: true,
type: "Get",
url: "/profile/ValidateBalieCode/",
contentType: "application/json; charset=utf-8",
data: { "BalieCode": code },
success: function (data) {
$("input#UserName").val(data.UserName);
$("input#Password").val(data.Password);
}
});
}
但网址是这样的:
http://localhost:5923/en-us/profile/loginbalieuser
总是这样:en-us。但如果我这样做:
url: "en-us/profile/ValidateBalieCode/",
然后在chrome中我看到了:
http://localhost:5923/en-us/profile/en-us/profile/ValidateBalieCode/?BalieCode=1 404 (Not Found)
答案 0 :(得分:0)
您需要有一个单独的操作方法来获取UserName
和Password
BalieCode
。
<强> Demo 强>
查看:强>
@using (Html.BeginForm("LoginBalieUser", "LogIn", FormMethod.Post, new { @class = "form" }))
{
@Html.AntiForgeryToken()
<table>
<tr>
<th>
@Html.DisplayNameFor(modelItem => modelItem.BalieCode)
</th>
<th></th>
</tr>
<tr>
<td>
@Html.TextBoxFor(modelItem => modelItem.BalieCode, new { @onchange = "ValidateBalieCode()" })
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(modelItem => modelItem.UserName)
</th>
<th></th>
</tr>
<tr>
<td>
@Html.TextBoxFor(modelItem => modelItem.UserName)
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(modelItem => modelItem.Password)
</th>
<th></th>
</tr>
<tr>
<td>
@Html.PasswordFor(modelItem => modelItem.Password)
</td>
</tr>
</table>
<div class="form-row">
<h4></h4>
<input type="submit" value="Login" />
</div>
}
<强>控制器:强>
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View(new SampleViewModel());
}
public JsonResult ValidateBalieCode(string BalieCode)
{
string strUserName = string.Empty;
string strPassword = string.Empty;
List<SampleViewModel> _db = new List<SampleViewModel>();
_db.Add(new SampleViewModel() { BalieCode = "1", UserName = "test1", Password = "test1" });
_db.Add(new SampleViewModel() { BalieCode = "2", UserName = "Test2", Password = "test2" });
var SampleViewModel = _db.Find(x => x.BalieCode == BalieCode);
if(SampleViewModel != null)
{
strUserName = SampleViewModel.UserName;
strPassword = SampleViewModel.Password;
}
return Json(new{ UserName = strUserName, Password = strPassword }, JsonRequestBehavior.AllowGet);
}
}
<强>脚本强>
<script type="text/javascript">
function ValidateBalieCode(){
var code = $('input#BalieCode').val();
$.ajax({
type: "Get",
url: '@Url.Action("ValidateBalieCode", "Home")',
data: { "BalieCode":code },
success: function (data) {
$("input#UserName").val(data.UserName);
$("input#Password").val(data.Password);
}
});
}
</script>