2017-09-13 10 views
0

J'essaie d'obtenir l'adresse IP de la machine client Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; ça fonctionne bien.Comment enregistrer dans la base de données Adresse IP du client de la machine à visiteurs dans ASP.Net MVC?

Get IP à la page charge

public ActionResult AddCompany() 
     { 
      get_IP(); 
      return View(); 
     } 

Code get_IP

public void get_IP() 
     { 
      string ipAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
      if (string.IsNullOrEmpty(ipAddress)) 
      { 
       ipAddress = Request.ServerVariables["REMOTE_ADDR"]; 
      } 
      ViewBag.IPAddress = ipAddress; 
     } 

Mais lorsque l'utilisateur enregistrer la forme obtenir une valeur d'adresse IP également enregistrer dans la base de données ..

Cs.html Fichier

<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"> 
    <h1 class="page-header">Add Company</h1> 

    @using (Html.BeginForm()) 
    { 
     @Html.AntiForgeryToken() 

     <div class="form-horizontal"> 
      @Html.ValidationSummary(true) 
      @Html.HiddenFor(model => model.IPAddress) 
      <div class="form-group"> 
       @Html.LabelFor(model => model.CompanyName, new { @class = "control-label col-md-2" }) 
       <div class="col-md-10"> 
        @Html.EditorFor(model => model.CompanyName) 
        @Html.ValidationMessageFor(model => model.CompanyName) 
       </div> 
      </div> 

      <div class="form-group"> 
       @Html.LabelFor(model => model.ShortName, new { @class = "control-label col-md-2" }) 
       <div class="col-md-10"> 
        @Html.EditorFor(model => model.ShortName) 
        @Html.ValidationMessageFor(model => model.ShortName) 
       </div> 
      </div> 

      <div class="form-group"> 
       @Html.LabelFor(model => model.Email, new { @class = "control-label col-md-2" }) 
       <div class="col-md-10"> 
        @Html.EditorFor(model => model.Email) 
        @Html.ValidationMessageFor(model => model.Email) 
       </div> 
      </div> 

      <div class="form-group"> 
       @Html.LabelFor(model => model.Country, new { @class = "control-label col-md-2" }) 
       <div class="col-md-10"> 
        @*@Html.EditorFor(model => model.Country)*@ 
        @Html.DropDownList("Country", null, "---Select Country----") 
        @Html.ValidationMessageFor(model => model.Country) 
       </div> 
      </div> 

      <div class="form-group"> 
       <b>State: </b> 
       <select id="state"></select><br /> 
      </div> 
      <div> 
       <b>City: </b> 
       <select id="city"></select><br /> 
      </div> 
      <div class="form-group"> 
       @Html.LabelFor(model => model.MobileNo, new { @class = "control-label col-md-2" }) 
       <div class="col-md-10"> 
        @Html.EditorFor(model => model.MobileNo) 
        @Html.ValidationMessageFor(model => model.MobileNo) 
       </div> 
      </div> 
      <div class="form-group"> 
       <div class="col-md-offset-2 col-md-10"> 
        <input type="submit" value="Create" class="btn btn-default" /> 
       </div> 
      </div> 
     </div> 
    } 

    <div> 
     @Html.ActionLink("Back to List", "Index") 
    </div> 
</div> 

Je crée une valeur cachée déposée mais il ne fonctionne pas ..

Le chargement de la page IPAddress Valeur est montrant .après je clique pour bouton Enregistrer la valeur Ip est pas enregistrée dans la base de données ..

AddCompany

[HttpPost] 
     public ActionResult AddCompany(Company cmp) 
     { 
      using (DataContext entities = new DataContext()) 
      { 
       entities.Company.Add(cmp); 
       entities.SaveChanges(); 
       int id = cmp.CompanyID; 
       Session.Clear(); 
       Response.Redirect("Index"); 
      } 
      return View(cmp); 

     } 

Toute idée Comment sauver Adrress IP du client à partir de la base de données ..

classe fichier

[Table("MySecondMVCDemo")] 
    public class Company 
    { 
     [Key] 
     public int CompanyID { get; set; } 
     [Required(ErrorMessage = "Please Enter Company Name")] 
     [Display(Name = "CompanyName")] 
     public string CompanyName { get; set; } 
     [Required(ErrorMessage = "Please Enter Short Name")] 
     [Display(Name = "ShortName")] 
     public string ShortName { get; set; } 
     [Required(ErrorMessage = "Please Enter Email Address")] 
     [Display(Name = "Email")] 
     public string Email { get; set; } 
     [Required(ErrorMessage = "Please Enter Email Address")] 
     [Display(Name = "Country")] 
     public string Country { get; set; } 
     [Required(ErrorMessage = "Please Enter Mobile No")] 
     [Display(Name = "MobileNo")] 
     public string MobileNo { get; set; } 
     public Int32? IPAddress { get; set; } 
    } 

Répondre

1

Je ne sais pas HiddenFor parce que je ne l'ai pas l'utiliser avant . Comment je me suis caché des champs avant était comme ça:

@Html.TextBoxFor(model => model.IPAddress, new { @class = "sr-only", @type = "hidden" }) 

Vous pouvez ajouter la classe d'amorçage sr seule pour vous assurer qu'il est caché. Assurez-vous de vérifier l'inspecteur de votre navigateur pour voir si le champ caché a une valeur.

Si affiché et est toujours pas sauver, essayez d'affecter l'identité IpAddress à la valeur de champ de formulaire avant de l'enregistrer comme ceci:

cmp.IPAddress = Request.Form["IPAddress"];