如何自动填写模型数据

时间:2017-04-11 08:37:14

标签: c# asp.net-mvc model asp.net-ajax

我有一个包含用户名和密码以及代码的登录模型。

现在我想要如果你填写代码然后自动填写相关的用户名和密码。所以例如你填写代码: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)

1 个答案:

答案 0 :(得分:0)

您需要有一个单独的操作方法来获取UserNamePassword 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>