2016-12-31 5 views
0

基本CRUDに変更を保存しようとしています。私は私のモデルで3つの列のビューを編集しました(テーブルには7つの列があります)。編集操作後に保存しない

動作しなかった別のポストで参照されていたメソッドをアタッチしようとしました。いかなる考えも認められるだろう。

モデル

public class AssetRequest 
{ 
    public int Id { get; set; } 

    [DataType(DataType.Date)] 
    [Display(Name = "Request date")] 
    public DateTime AssetRequestDate { get; set; } 



    [Display(Name = "Facility")] 
    public int FacilityId { get; set; } 

    [Required] 
    [Display(Name = "Asset requested")] 
    public int AssetId { get; set; } 

    [Display(Name ="Serial no.")] 
    public string AssetSN { get; set; } 

    [Required] 
    [Display(Name = "Request type")] 
    public int RequestTypeId { get; set; } 

    [Required] 
    [DataType(DataType.Date)] 
    [Display(Name = "Job date")] 
    public DateTime JobRequestDate { get; set; } 



    [Required] 
    [Display(Name = "Request status")] 
    public int RequestStatusId { get; set; } 



    [Display(Name = "Tracking no.")] 
    public string TrackingNo { get; set; } 

    [Display(Name = "Comments")] 
    public string Comments { get; set; } 

    [Display(Name = "Sending facility")] 
    public string SendingFacilityt { get; set; } 

    public virtual Asset Asset { get; set; } 
    public virtual Facility Facility { get; set; } 
    public virtual ApplicationUser User { get; set; } 
    public virtual RequestType RequestType { get; set; } 

    public virtual RequestStatus RequestStatus { get; set; } 
} 

}

コントローラ

public async Task<ActionResult> Edit([Bind(Include = "RequestStatusId, TrackingNo, Comments")] AssetRequest assetRequest) 
{ 
    if (ModelState.IsValid) 
    { 

     //db.AssetRequestTable.Attach(assetRequest); 
     db.Entry(assetRequest).State = EntityState.Modified; 
     await db.SaveChangesAsync(); 
     return RedirectToAction("All"); 
    } 
} 

表示

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

    <div class="form-horizontal"> 
     <h4>AssetRequest</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     @Html.HiddenFor(model => model.Id) 



     <div class="form-group"> 
      @Html.LabelFor(model => model.DistrictId, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownList("DistrictId", null, htmlAttributes: new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.DistrictId, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.AssetId, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownList("AssetId", null, htmlAttributes: new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.AssetId, "", new { @class = "text-danger" }) 
      </div> 
     </div> 



     <div class="form-group"> 
      @Html.LabelFor(model => model.RequestStatusId, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownList("RequestStatusId", null, htmlAttributes: new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.RequestStatusId, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

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

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

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Save" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

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

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 
+2

Entity Frameworkの任意の属性やモデルビルダコードを含むAssetRequestの定義を参照する必要があります。 'db.SaveChangesAsync()'から返された値も必要です –

+0

.saveChangeAsyncメソッドからコードを追加できますか? –

+2

@AidaIsay ['SaveChangesAsync()'](https://msdn.microsoft.com/en-us/library/dn220070(v=11113).aspx)はフレームワークメソッドであり、* code *はありませんそれ。 –

答えて

2

EFがアイテムを取得して更新できるように、(プライマリキーである)Idプロパティをインクルードリストに含めることにしました。

public async Task<ActionResult> Edit([Bind(Include = "Id,RequestStatusId, TrackingNo, 
                Comments")] AssetRequest assetRequest) 
{ 
    // your code 
} 

エンティティ値を更新するパラメータとしてエンティティモデルを使用しているようです。 A better approach to prevent over posting is to use a view model

+0

@ Shyju:私は目的のために3つのプロパティ名を更新したい。私の質問は、これらを更新せず、すべての人にビューを返す理由です。 – moka

+0

ありがとう、まだ動作していない、 – moka

+0

何か問題がありますか?テーブルのデータが更新されていないことを確認しましたか?あなたのコードはうまく見える(あなたがIDを含む限り)。 – Shyju

関連する問題