2017-05-22 2 views
0

目次:グリッドに編集された複数の項目を保存します。IEnumerableを使用するASP.NETポストメソッド

質問:投稿方法の定義方法がわかりません。

こんにちは、

私は彼がそれを更新するために、私は、ユーザーに提示するレジスタのグリッド/表を持っています。これは図である:それは編集されています一度

@model IEnumerable<Application.Models.Machine> 
@{ 
    ViewData["Title"] = "Test"; 

} 

<h2>Management</h2> 
<hr /> 
<table class="table"> 
    <thead> 
     <tr> 
      <th>Serial</th> 
      <th>Store</th> 
</tr> 
</thead> 
<tbody> 
    @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       <div class="form-group"> 
        <div class="col-md-10"> 
         <input asp-for="@item.MchName" readonly class="form-control" /> 
         <span asp-validation-for="@item.MchName" class="text-danger"></span> 
        </div> 
       </div> 
      </td> 
      <td> 
       <div class="form-group"> 
        <div class="col-md-10"> 
         <select asp-for="@item.StoreID" class="form-control" asp-items="ViewBag.StoreID"> 
          <option value="">-- Seleccione Tienda --</option> 
         </select> 
         <span asp-validation-for="@item.StoreID" class="text-danger"></span> 
        </div> 
       </div> 
      </td> 
</tr> 
} 
</tbody> 
</table> 

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

それが保存されなければならないと修正のレジスタを更新する必要がありますが、私はのIEnumerableの場合にPOSTメソッドを定義する方法のアイデアを持っていません。私はこれをやった

、最初の新しいクラスモデルのIEnumerableを含まれています:私はIEnumerableを公共の代わりをしたAltough

public class EditMachineViewModel 
{ 
    public IEnumerable<Application.Models.Machine> Machines { get; set; } 
} 

追記をIBROコメント続き

プライベート。

public async Task<IActionResult> Test(EditMachineViewModel model) 

エラーメッセージ:この行で

[HttpPost, ActionName("Test")] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Test(EditMachineViewModel model) 
    { 
     var machinestoUpdate = await _context.Machines; 
     if (await TryUpdateModelAsync(
      machinestoUpdate, 
      "", 
      s => s.MchName, s => s.StoreID, s => s.PUnit, s => s.Status)) 
     { 
      try 
      { 
       await _context.SaveChangesAsync(); 

      } 
      catch (DbUpdateException) 
      { 
       ModelState.AddModelError("", "Unable to save changes. " + 
        "Try again, and if the problem persists, " + 
        "see your system administrator."); 
      } 
      return RedirectToAction("Index"); 
     } 
    } 

いくつかのものは、ここで起こった:第二部については

はI POSTメソッドをこのように定義されました: 'MachinesController.Test(EditMachineViewModel)':すべてのコードパスが値を返すわけではありません

しかし、これはまだ行われていないので、エラーを表示するのは当然です。この行で

var machinestoUpdate = await _context.Machines; 

エラーメッセージ:

:この行はで終わる必要があります(旧たとえば、次の) 'GetAwaiter「DbSetは、の定義を持っていない' が、実際
.SingleOrDefaultAsync(s => s.Id == id); 

私はIDを渡していないので、私はそれを使用することはできません。

ご協力いただきありがとうございます。

答えて

0

あなたは本当にPOSTのための別の方法(アクション)を使用する必要があります

 [HttpGet, ActionName("Edit")] 
     [ValidateAntiForgeryToken] 
     public async Task<IActionResult> EditPost(int? id) 

     [HttpPost, ActionName("Edit")] 
     [ValidateAntiForgeryToken] 
     public async Task<IActionResult> EditPost(EditMachineViewModel model) 

public class EditMachineViewModel 
{ 
    public IEnumerable<Application.Models.Machine> Machines { get; set; } 
} 
+0

こんにちは、IBROを。私はあなたの提案に続き、最初の投稿を更新しました。私は私の側で不完全かもしれない1行について疑問に思います、それは#2弾です。あなたの意見を教えてください。ありがとう! –

関連する問題