2017-04-11 3 views
0

Ich habe ein Login-Modell mit Benutzername und Passwort und Code.So geben Sie automatisch Modelldaten ein

Und jetzt möchte ich, wenn Sie den Code dann automatisch den zugehörigen Benutzernamen und das Passwort ausgefüllt haben. So zum Beispiel füllen Sie für Code: HD und dann TAB und dann die Textfelder für Benutzername und Passwort muss gefüllt in

die Aktion Methode sieht wie folgt aus:.

[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"); 
     } 

das erweiterte Modell sieht wie folgt aus:

public class V_LoginModel_BalieUser : LoginModel 
    { 

     public string BalieCode { get; set; } 
} 

und der oder iginal Modell sieht wie folgt aus:

// 
    // 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; } 
    } 

und der Blick sieht wie folgt aus:

@{ 

    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>  

    } 

Also habe ich versucht, mit einem Aufruf Ajax. Aber die genaue Umsetzung weiß ich nicht.

Danke

dies ist das Modell: 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; } 
    } 

Aber ich bekomme diese Fehlermeldung:

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> 

und das ist mein Ajax-Aufruf:

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); 
        } 
       }); 


      } 

wenn ich loa d die Seite in Goog chrome:

Ich sehe dies:

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,

habe ich es jetzt wie folgt aus:

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); 
        } 
       }); 


      } 

aber die URL ist wie folgt:

http://localhost:5923/en-us/profile/loginbalieuser 

also immer: en uns. aber wenn ich dies tun:

url: "en-us/profile/ValidateBalieCode/", 

dann in Chrom Ich sehe dies:

http://localhost:5923/en-us/profile/en-us/profile/ValidateBalieCode/?BalieCode=1 404 (Not Found) 
+0

ich keine Kontrolle mit id '# Id' finden konnten. Also, was ist '$ (" # ID "). Ändern" – mmushtaq

+0

Vielen Dank für Ihre Antwort. Ich bearbeite den Post, den ich dachte, Id ist die ID von salesAgent99. Ich weiß nicht genau, wie man es mit Ajax macht –

+0

Es ist wirklich schwer, Ihre Frage zu verstehen. Ihre 'LoginBalieUser' Aktion ist mit' HttpPost' gekennzeichnet und in Ihrem Ajax geben Sie 'get' an. – mmushtaq

Antwort

0

Sie benötigen eine separate Aktionsmethode haben, für UserName und Password gegen BalieCode bekommen.


Demo


Ausblick:

@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> 
     } 

Controller:

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

<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> 
+0

Danke. Sehr schön. Aber natürlich habe ich die Daten in einer Datenbank gespeichert –

+0

Ja, für die Demo habe ich eine Liste verwendet. Für das tatsächliche Szenario müssen Sie Benutzernamen und Kennwort für BalieCode aus Ihrer Datenbank suchen. – mmushtaq

+0

oke. Aber ich bekomme diese Fehler: –

Verwandte Themen