2016-04-16 19 views
0

最後に弱いAsp.netを学習し始めましたが(以前の経験はありませんでしたが、データベースレコードを更新する際に問題がありました) 。Entity FrameWorkを使用してレコードを更新する。更新時の新しいレコード

似たような質問が1つしかありませんでしたが(How to update record using Entity Framework 7?)、フォームやコントローラは使用されていませんでしたので、あまり役に立ちませんでした。

私はオブジェクトに

namespace Daycare.Models 
{ 
    public class Question 
    { 
     public Question() { 

     } 

     public int id { get; set; } 
     public string title { get;set;} 

     public string question { get; set; } 

     public string answer { get; set; } 
     public DateTime date { get; set; } 
    } 
} 

コントローラを有し、ビューが自動的に生成されました。

削除と作成はうまく動作しますが、編集メソッドは新しい空のオブジェクトのみを作成します。

 public IActionResult Edit(int? id) 
    { 
     if (id == null) 
     { 
      return HttpNotFound(); 
     } 

     Question question = _context.questions.Single(m => m.id == id); 
     if (question == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(question); 
    } 

    // POST: Questions/Edit/5 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public IActionResult Edit(Question question) 
    { 
     if (ModelState.IsValid) 
     { 
//stuff i've tried. 
     // _context.questions.Update(question); 

       _context.Update(question); 
    //   _context.Entry(question).State = EntityState.Modified; 
      _context.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(question); 
    } 

これは、私は非常に任意のヘルプをお願い申し上げフォーム

<form asp-action="Edit"> 
 
    <div class="form-horizontal"> 
 
     <h4>Question</h4> 
 
     <hr /> 
 
     <div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div> 
 
     <input type="hidden" asp-for="id" /> 
 
     <div class="form-group"> 
 
      <label asp-for="question" class="col-md-2 control-label"></label> 
 
      <div class="col-md-10"> 
 
       <input asp-for="question" class="form-control" /> 
 
       <span asp-validation-for="question" class="text-danger" /> 
 
      </div> 
 
     </div> 
 
     <div class="form-group"> 
 
      <label asp-for="title" class="col-md-2 control-label"></label> 
 
      <div class="col-md-10"> 
 
       <input asp-for="title" class="form-control" /> 
 
       <span asp-validation-for="title" 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> 
 
</form>

です。

事前に大変感謝しています。

+0

「質問qを呼び出す)(修正されたオブジェクトをマークする行に

_context.Entry(question).State = EntityState.Modified; 

この行力エンティティフレームワークのコメントを解除してみてのSaveChanges中にオブジェクトのupdateコマンドを実行します=新しい質問(); int b =整数(question.id); int _a = 5007; q.id = _a; _context.questions.Attach(question); _context.Entry(質問).State = EntityState.Modified; _context.SaveChangesAsync(); ' これは動作しているようですが、エラーが発生します。 _a = question.id – Greenmachine

答えて

1

すべての入力では、たとえば、質問クラスのそれぞれの一致プロパティでname属性とid属性を指定するだけです。入力ラベル

@Html.LabelFor(model => model.title) 

の入力テキストの

OR またはあなたが入力、ラベルのためのHtmlHelper使用することができます...

@Html.EditorFor(model => model.title) 

提出し、コールを発射するときに、質問クラスが値をとりますメソッドを編集する。

//_context.Update(question); //instead of this you can use 

_context.Entry(question).State = EntityState.Modified; 
_context.SaveChanges(); 
+0

申し訳ありませんが、指定時にその部分をよく理解していません。 例を教えてください。 – Greenmachine

+0

これは動作しているようですが、q.id = question idを設定した場合 - InvalidOperationException:エンティティの状態を 'Modified'に変更しようとしているときに、エンティティタイプ 'Question'のプロパティ 'id'に一時的な値があります。 質問q =新しい質問(); q.id = 5007; q。 q。質問= "それは働く"; _context.questions.Attach(q); _context.Entry(q).State = EntityState.Modified; _context.SaveChangesAsync(); リターンRedirectToAction( "Index"); – Greenmachine

+1

** ** ** **または** @ HiddenFor(model => model.Id)**のようなhtmlヘルパーを使うことができます。モデル。 –

1

+0

あなたの返事のためにあなたはあなたの返事のために エンティティの状態を 'Modified'に変更しようとしているときに、エラー一時値が返されます。 私は静的な値をIdに設定すると動作します。例 質問q =新しい質問(); int _a = 5007; q.id = _a; IF q、id = question.id - エラー。 IDが変更されない場合は、上記のエラーが発生します。 – Greenmachine

関連する問題