2017-05-11 1 views
0

Je suis tout à fait nouveau pour ASP .Net, et pourrait utiliser un peu d'aide ... J'ai une application Web ASP .Net Core 1.1. Dans celui-ci, j'ai une vue "Edit" pour éditer un objet simple, qu'un contrôleur correspondant appelle lorsqu'il est routé vers lui. Voici la vue:vue Edition pas peuplé d'objets de données

@model InspectionsTestClient.Models.Property 

@{ 
    ViewData["Title"] = "Edit"; 
} 

<h2>Edit</h2> 

@Html.ValidationSummary(); 

<form asp-action="Edit"> 
    <div class="form-horizontal"> 
     <h4>Property</h4> 
     <hr /> 
     <div asp-validation-summary="ModelOnly" class="text-danger"></div> 
     <input type="hidden" asp-for="Id" /> 
     <div class="form-group"> 
      <label asp-for="UnitNumber" class="col-md-2 control-label"></label> 
      <div class="col-md-10"> 
       <input asp-for="UnitNumber" class="form-control" /> 
       <span asp-validation-for="UnitNumber" class="text-danger"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label asp-for="BuildingName" class="col-md-2 control-label"></label> 
      <div class="col-md-10"> 
       <input asp-for="BuildingName" class="form-control" /> 
       <span asp-validation-for="BuildingName" class="text-danger"></span> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label asp-for="Street" class="col-md-2 control-label"></label> 
      <div class="col-md-10"> 
       <input asp-for="Street" class="form-control" /> 
       <span asp-validation-for="Street" class="text-danger"></span> 
      </div> 
     </div> 
    </div> 
</form> 

<div> 
    <a asp-action="Index">Back to List</a> 
</div> 

@section Scripts { 
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");} 
} 

C'est le contrôleur qui appelle ce point de vue:

// GET: Property/Edit/5 
     public ActionResult Edit(int id) 
     { 
      return View(); 
     } 

Et voici le modèle:

namespace InspectionsTestClient.Models 
{ 
    //[Table("property")] 
    public class Property 
    { 

     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int? Id { get; set; } 

     [MaxLength(10, ErrorMessage = "Unit number too long")] 
     [Display(Name = "Unit #")] 
     public string UnitNumber { get; set; } 

     [MaxLength(45, ErrorMessage = "BuildingName name too long")] 
     public string BuildingName { get; set; } 

     [MaxLength(45, ErrorMessage = "Street too long")] 
     public string Street { get; set; } 
    } 

} 

Alors, quand je navigue sur cette page, la le contrôleur se déclenche et renvoie la vue Modifier. J'ai confirmé que le paramètre "id" est rempli. Lorsque la vue Modifier est chargée dans le navigateur, toutes les zones de saisie sont vides. Je m'attendrais à ce qu'ils soient pré-remplis avec les valeurs de l'objet en question. Qu'est-ce que je rate?

Répondre

1

Le problème que vous rencontrez se produit parce que vous ne retournez pas cet objet à la vue .. en fait dans votre cas, vous n'êtes même pas sortir à la DB pour obtenir l'objet.

Vous devez vous modifier Edit action quelque chose comme ceci:

// GET: Property/Edit/5 
public ActionResult Edit(int? id) 
{ 
    if (id == null) 
    { 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
    } 

    var object = db.TableName.Find(id); 

    // db = connectionstring 
    // TableName = database table that holds the object that you want to return 

    if (object == null) 
    { 
     return HttpNotFound(); 
    } 

    return View(object); 
} 

Laissez-moi savoir si cela aide

+0

Bien sûr! Mec, comment pourrais-je être si stupide ..... Merci BviLLe_Kid – user1900799

1
public class PropertyController 
    { 
     private readonly ApplicationDbContext _dbContext; 
     public PropertyController(ApplicationDbContext dbContext){ 
      _dbContext = dbContext; 
     } 

    //GET: Property/Edit/5 
     public async Task<IActionResult> Edit(int id) 
     { 
      var property = await _dbContext.Property.FirstOrDefaultAsync(p => p.Id == id); 
      return View(property); 
     } 
    } 

Si vous ne tirez pas les données de la base de données et ne les envoyez pas à la vue, elles seront toujours vides. Edit(int id) il y aura 2, à la fois un peu différent de l'autre.

[HttpPost]  
    [ValidateAntiForgeryToken] 
    //Post: Property/Edit/5 
    public async Task<IActionResult> Edit(int id, [Bind("Id", "UnitNumber", "BuildingNumber", "Street")] Property property) 
    { 
    if(ModelState.IsValid){ 



     } 
     else{ 

    } 
    } 

pas tout est présent mais cela fait partie de votre aventure.

+0

Merci mvermef - a complètement manqué que ... – user1900799