2017-05-30 20 views
0

私はMVCを初めて使用していて、最後に作成されたIDを渡そうとしています(保存ボタンがフォーム内でクリックされた後)。最後の挿入IDをtoastrに渡す - Asp.Net MVC 4

トーストの表示にこの値を渡すことができるかどうか誰にも教えてください。保存ボタンを押すとそのID番号が返されます。

+0

確かに、私はそれを好きです。 "save"では、 'NewItemHandler'-ViewでPOSTリクエストを発生させる' jQuery.post() 'を呼び出します。次に、このViewはオブジェクトを作成し(格納し)、そのオブジェクトのIDを取り出し、このオブジェクトIDをプレーンテキストの結果として返します。成功すると、 'post()'は成功メソッドを呼び出して、 'data'変数を使って結果にアクセスし、乾杯します。 – jAC

+0

ありがとう@JanesAbouChleih、今すぐ試してみましょう! – Kehoe

答えて

0

私のコメントに加えて、ここではもっと複雑な答えがあります。

  • 再生回数::CreateItem、NewItemHandler
  • コントローラ:ItemHandler
  • Javascriptを:site.jsとjQuery

CreateItemビューがある

は、おおまかには以下の項目が含まれていますユーザーが項目値を入力するダイアログ。私の場合は、2つのinputフィールドと、submitボタンが必須の単純なフォームです。

@{ 
    ViewBag.Title = "CreateItem"; 
} 

<h2>CreateItem</h2> 

<form id="newItemForm"> 
    Item name: <input id="itemname" type="text" name="fname"><br> 
    Item weight: <input id="itemweight" type="text" name="lname"><br> 
    <input type="submit" value="Submit"> 
</form> 

submitをクリックするとJavaScriptがリダイレクトを停止する必要があり、これは$("newItemForm").submit(...)falseを返すことによって行われます。

$('#newItemForm').submit(function() { 
    sendPostAndShowResult(); 
    return false; 
}); 

function sendPostAndShowResult() { 
    var name = $("#itemname").text(); 
    var weight = $("#itemweight").text(); 
    $.post("/Item/NewItemHandler", 
     { "name": name, "weight": weight } 
    ).done(function (data) { 
     alert("The ID of your new item is: " + $.trim(data)); //replace with toast 
    }) 
    .fail(function() { 
     alert("Error while processing the request!"); 
    }); 
} 

だけヒント:さらに我々それが私たちのアイテムを作成する必要があるサーバーを指示する必要はありませんので、我々は我々自身の提出私はjQuery.post()で行ったリクエストを作成する必要があり、私はトーストを使用していませんここでは、私はそれを使ったことがないので、適応するのはあまり難しくありません。

ビューが非常に簡単である:

パズルの最後のピースは、アイテムを作成し、IDを図面および値を返すNewItemHandlerです。レイアウトは必要ないので、 ""に設定されています。

@{ 
    Layout = ""; 
} 
@Html.Raw(Session["ItemID"]) 

ご覧のとおり、Sessionオブジェクトに「ItemID」を取得するだけで済みます。これはコントローラによって行われます。

[HttpPost] 
public ActionResult NewItemHandler(string name, string weight) 
{ 
    int id = GenerateNewItem(name, weight); 
    Session["ItemID"] = id; 
    return View(); 
} 


EDIT:あなたのコントローラでreturn View();return RedirectToAction()を削除する必要が

:私はあなたのソリューションには、このアプローチを適応させることを試みました。これにより、応答が返され(Save.cshtml)、そのIDはオーロラの空のファイル(Layout = "")になります。 あなたSave.cshtmlは、私が推測するので、Saveメソッドがリモートで次のようになりますあなたのコントローラで

@{ 
    Layout = ""; 
} 
@Html.Raw(Session["ItemID"]) 

に置き換える空です。

@using (Html.BeginForm("Save", "BidstonHwrc",FormMethod.Post, new { id = "SaveBidstonHwrc" })) 

コードは、次のようになり、単純にIDを適応させる必要があります:

$('#SaveBidstonHwrc').submit(function() { 
    sendPostAndShowResult(); 
    return false; 
}); 

function sendPostAndShowResult() { 
    //foreach Model/ViewModel Property one line e.g. 
    var Id = $("Id").text(); 
    var McnNumber = $("McnNumber").text(); 
    $.post("/BidstonHwrc/Save", 
     { "Id": Id, "McnNumber": McnNumber } 
    ).done(function (data) { 
     alert("The ID of your new item is: " + $.trim(data)); //replace with toast  
     $(location).attr('href', '/Home/Index') //Redirect to Home 
    }) 
    .fail(function() { 
     alert("Error while processing the request!"); 
    }); 
} 

MCN Formあなたはカミソリを経由して、あなたの<form>タグにIDを与える必要がで

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Save(BidstonHwrc bidstonhwrc) 
    { 
     _context.BidstonHwrc.Add(bidstonhwrc); 

     try 
     { 
      _context.SaveChanges(); //either all changes are made or none at all 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
     } 

     int id = bidstonhwrc.Id; 
     Session["ItemID"] = id; 
     return View(); 
    } 

私は、あなたのソリューションを少しは表現するはずのプロジェクトをアップロードしました。
ここからダウンロードできます(28MB):Project download

+0

こんにちは@JanesAbouChleih、下記をご覧ください。どんなアドバイスも大歓迎です!私のコードでこれをどうやって合わせるか分かりません。 – Kehoe

関連する問題