0

mvc3アプリケーションを作成しました。Sessionデータベースに変更を保存する前にいくつかの作業を行う必要があるため、現在、送信フォームの値をに保存しています。

一時データをMVCに保存する他の良い方法はありますViewStateか?

データが入力されるたび、および送信ボタンをクリックするたびに、フォームの入力値をSession変数に保存しています。

送信するたびに、セッション変数に新しい値を追加し、それらすべての値をwebgridに表示しています。

挿入が完了したら、最後に更新ボタンをクリックします。このボタンは、webgridからすべての値を取得し、パラメーターとして1つのストアドプロシージャに渡します。

Now here i want to achieve 2 things
1.need to save all inserted data as clicked on submit it gets refresh all time.
so need to save all previous data to.
2.currently using session variable which sets to webgrid to show data into webgrid and once done with insertion passing those values to stored procedure.

したがって、データを保存する他の良い方法を知る必要があります。

Else can use javascript to do this all on client side.
4

3 に答える 3

5

2つの理由から、ステートレスWebをステートフルに見せようとするスキームは避ける必要があります。

まず、Sessionはラウンドトリップを回避しません。これは、データベースに値を格納することとは名目上異なるだけです。はい、メモリのフェッチはSQLからのフェッチよりも高速ですが、これは適切に拡張できません。拡張するには(複数のサーバー)、ゲインを減らして複雑さを劇的に高めるコンポーネントとホップを追加する必要があります。

第二に、Sessionの値はとにかくデータベースに到達する可能性が高いので、そもそもそこから始めてみませんか。

第三に(はい、別のものです)、Sessionは必ずしも隠されたフォームフィールドよりも信頼できるものではありません。

13年間で、セッションがほとんど間違った目的でのみ使用されるのを見てきました。開発者は便宜上セッションの使用に戻り、後で後悔します(セッションを置き換えてコードを維持する必要がある開発者も同様です)。

つまり、データベースを使用してこの情報を保存し、それをフェッチしてキャッシュする方法を賢く理解してください。

于 2012-04-19T16:34:07.027 に答える
2

TempData(http://msdn.microsoft.com/en-us/library/system.web.mvc.controllerbase.tempdata.aspx)を使用できますが、それは1つの要求から次の要求までしか持続しないことを知っておいてください。

TempData["someKey"] = "";
于 2012-04-19T15:50:28.523 に答える
2

投稿間でデータを永続化する必要がある場合は、Sessionが適切な場所です。データをデータベースに書き込む必要がある場合は、モデルがデータをポストで処理する必要があります。コントローラ内:

[HttpPost]
public ActionResult Index(YourModel model)
{
    if (ModelState.IsValid)
    {
        model.SaveToDataBase();
        return View("Success");
    }
    return View("Index", model);
}

次に、モデルで:

[Serializable]
public class YourModel
{
    [Required]
    public string YourData { get; set; }

    public void SaveToDataBase()
    {
         //TODO - add code to call stored procedure with data posted to model
    }
}
于 2012-04-19T16:20:53.350 に答える