2017-11-01 19 views
0

データを更新できないというこの問題が発生しています。編集ページに移動しますが、更新をクリックすると他のページにリダイレクトされ、データは表示されません。更新されたデータをリダイレクトされたときにどのように表示させるかレコードを更新/編集する方法Asp.net MVC

private Issue getIssue 
    { 
     get 
     { 
      Issue issue = (Issue)Session["Issue"]; 
      if (issue == null) 
      { 
       issue = new Issue(); 
       Session["Issue"] = issue; 
      } 
      return issue; 

     } 

    } 


    public ActionResult Edit(int id) 
    { 

     getIssue.item = getIssue.items[id - 1];//Returns the requested item for editing 
     return View(getIssue); 
    } 

    [HttpPost] 
    public ActionResult Edit(Issue issue) 
    { 
     int indx = issue.item.lineNum - 1; 
     getIssue.items[indx] = issue.item; 
     //return View(getIssue); 
     return RedirectToAction("IssueItem", "Issue"); 
    } 

ビュー:クラスの問題

コントローラと更新質問

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

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



    <fieldset> 
     <div class="form-horizontal"> 

      <hr /> 
      <div class="form-group"> 
       <div class="form-group"> 
        @Html.LabelFor(model => model.item.itemNumber, htmlAttributes: new { @class = "control-label col-md-2" }) 
        @Html.TextBoxFor(model => model.item.itemNumber, null, new { @id = "itemNumber", @class = "form-control", @readonly = "readonly", }) 
        @Html.ValidationMessageFor(model => model.item.itemNumber, "", new { @class = "text-danger" }) 
       </div> 

       <div class="form-group"> 
        @Html.LabelFor(model => model.item.description, htmlAttributes: new { @class = "control-label col-md-2" }) 
        @Html.TextBoxFor(model => model.item.description, null, new { @id = "description", @class = "form-control", @readonly = "readonly", }) 
        @* @Html.EditorFor(model => model.item.description, new { @class = "control-label col-md-2", @id = "txtItem" })*@ 
        @Html.ValidationMessageFor(model => model.item.description, "", new { @class = "text-danger" }) 
       </div> 


<div class="form-group"> 
       <div class="col-md-offset-2 col-md-10"> 
        <input type="submit" value="Update" name="Update" class="btn btn-default" /> 
        <input type="button" value="Cancel" name="Cancel" onclick="location.href='@Url.Action("IssueItem","Issue")' " class="btn btn-default" /> 
       </div> 

      </div> 
+0

上記のコードでは、更新ボタンを提供しませんでした。 –

+1

はい

+0

[PRGパターン](https://stackoverflow.com/questions/)に従います。 11209191/how-do-i-include-a-redirecttoaction/11209320#11209320)。 – Shyju

答えて

0

問題は、セッションをクリアするためにセッションを使用していたため、そのセッションがリダイレクトされるたびにクリアされていました。私は削除してからうまく動作します。

0

getIssue.items[indx] = issue.item;がアイテムを更新すると仮定すると、

必要があるサーバーの項目を更新した後:

  1. 更新されたアイテムを知る
  2. ユーザーを更新アイテムにリダイレクトする。

リダイレクトRedirectToAction("IssueItem", "Issue");は、特定のURLではなく一般的なURLにリダイレクトされています。それが問題だ。

  1. 更新されたアイテムを取得します。あなたはIdを使用しませんが、[HttpPost]メソッドではindxを使用します。したがって、indxにはアイテムの識別番号が記載されています。

  2. ユーザーをアイテムページにリダイレクトします。私はあなたのプロジェクトを知らないので、私はDetailページがあると仮定します。 indx変数を取得し、redirectにargとして渡します。たとえば、RedirectToAction("Detail",new {id = indx});これは機能するはずです。私が気づい

+0

idは別のものではないのでスニペットできますか?変数がエラーを返すように編集する(問題を発行する) –

+0

私は答えを変更しました。idの代わりに 'indx'を使用しています –

+0

あなたの説明ではわかりません –

0

まず最初は、あなたがHtml.HiddenForを使用する必要があり、ビューで更新されるためにあなたのオブジェクトの識別子を保存していないということである、このように:

@Html.HiddenFor(x => x.lineNum) 

私はそのLINENUMを仮定あなたのオブジェクトの識別子です。

+0

私はこの質問に関連する問題があります、私は今、識別子オブジェクトが0を返し、私にエラーを与えることを認識しました。質問、行番号を使用してオブジェクトを識別する代わりに何か他のものを使用することができます。なぜなら、場合によっては、idが常に1であるため、最初の項目だけを取り上げるからです。 –

+0

@TroyBrownリストの要素のインデックスも使用できると思います。または、次のようなハッシュコードを使用できます。var hash = myObject.GetHashCode(); –

+0

私のリストにはどのようにインデックス要素を使用しますか? –

関連する問題