【问题标题】:Edit view not being populated with objects data编辑视图未填充对象数据
【发布时间】:2017-10-10 04:40:42
【问题描述】:

我对 ASP .Net 很陌生,可以使用一些帮助...我有一个 ASP .Net Core 1.1 Web 应用程序。在其中,我有一个“编辑”视图,用于编辑一个简单对象,相应的控制器在路由到它时会调用该对象。这是视图:

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

这是调用该视图的控制器:

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

这是模型:

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

}

因此,当我导航到该页面时,控制器会启动并返回编辑视图。我已确认已填充参数“id”。但是,当在浏览器中加载编辑视图时,所有输入文本框都是空的。我希望它们预先填充有问题对象的值。我错过了什么?

【问题讨论】:

    标签: razor asp.net-core-mvc asp.net-core-1.1


    【解决方案1】:

    您遇到的问题正在发生,因为您没有将该对象返回到视图中。实际上在您的情况下,您甚至没有去数据库获取对象。

    您需要将Edit 操作编辑为如下内容:

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

    如果这有帮助,请告诉我

    【讨论】:

      【解决方案2】:
         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);
             }
          }
      

      如果您不从数据库中提取数据并将其发送到视图,当然它将始终是空白的。 Edit(int id) 会有 2 个,两者都略有不同。

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

      并非所有事物都存在,但这是您冒险的一部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多