2012-02-01 13 views
0

私はasp.net mvcにはかなり新しいです。私は質問があります。例モデル:モデルを渡してビューからコントローラに再び渡します

public class FooModel 
{ 
public string StrA {get; set;} 
public string StrB {get; set;} 
} 

私はこのような何かどのように操作を行うことができます、(ストラ持つモデルがSTRBが空、満たされた)を表示私のモデルのSTRBを更新(STRAが満たされ、STRBが満たされた)、その後、私にそれを提出するパスモデルをStrAとStrBの両方でアクションが満たされます(デフォルトでは、StrBのみが埋め込まれたモデルの新しいインスタンスが渡され、以前のStrAの値は消滅します)。

私はHiddenForを使うことができると知っていますが、これを行うには他の方法がありますか?

答えて

2

私はHiddenForを使うことができると知っていますが、これを行う方法は他にありますか?

POSTアクションでは、StrAプロパティの値をGETアクションでフェッチした場所からフェッチできます。このように、隠しフィールドを使用して永続化する必要はありません。例えば

あなただけのユーザーがその値を変更することができますフォーム内 StrBのための入力フィールドを持つことができビューで今すぐ
public ActionResult Index() 
{ 
    var model = new FooModel 
    { 
     StrA = PopulateStrAFromSomewhere() 
    }; 
    return View(model); 
} 

[HttpPost] 
public ActionResult Index(string strB) 
{ 
    var model = new FooModel 
    { 
     StrA = PopulateStrAFromSomewhere(), 
     StrB = strB 
    } 

    ... do something with the model 
} 

@model FooModel 
@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(x => x.StrB) 
    @Html.EditorFor(x => x.StrB) 
    <button type="submit">OK</button> 
} 
0

あなたが構築することができますあなたのPOSTは、例えば、 jQuery AJAX(http://api.jquery.com/jQuery.post/)または手動でフォームを作成して送信してください(http://api.jquery.com/submit/)。つまり、ページに表示されているフォームを作成する必要はありません(回避したい場合)。

ただし、データをDOMに渡して何らかの方法で保持する必要があります(非表示フィールドなど)。 HTMLはステートレスであるため、StrAをどこかに魔法のように保存することはできません。実際にはサーバに戻す必要があるのですが、リクエスト間で変更するつもりがない限り、クライアントに戻す必要はありませんいずれにせよ(この場合、ダーリンの対応の例については、Darinの回答を参照してください)。

関連する問題