0

アクションを呼び出すことによってレンダリングされるビューがあり、それにビュー モデルを渡しています。

このビューには、いくつかのテキスト ボックスと「フィルター」ボタンを含む「フィルター」セクションがあり、テキスト ボックスの値を渡して別のアクションを呼び出し、div 内のページに 2 番目のビューを部分的にレンダリングしたいと考えています。 .

だから私はこれを行い、私のアクションは以下のようになり、「フィルター」ボタンがクリックされたときに ajax によって呼び出されます。

ActionResult ActionName (string inputText1, string inputText2, string inputText3, ...)

約 10 個のテキスト ボックスがあるため、新しい C# オブジェクトを作成し、そのオブジェクトをこのアクションに渡して、次のように簡単にしたいと考えています。

ActionResult ActionName(MyActionFilters myFilters)

これを達成する方法は?

4

3 に答える 3

1

あなたは以下のようなモデルを持つことができます

public class MyActionFilters
{
  public string Property1{get;set;}
  public string Property2{get;set;} 
  public string[] Property3{get;set;} 

  // add any number of properties....
}

GetActionメソッドで空のモデルを渡すことができます

ActionResult ActionName()
{
  MyActionFilters myEmptyActionFilers= new MyActionFilters();
  View(myEmptyActionFilers)
}

フォームで

Html.TextBoxFor(model => model.Property1)
Html.TextBoxFor(model => model.Property2)

次に、postメソッドで、前のコードを削除したフォームに入力されたモデルにアクセスできます。新しいコードは編集タグの後にあります:)

編集:申し訳ありませんが、私は周りにいませんでした。この種の機能は、AJAXを使用して簡単に実現できます:)

以下のようになります。

[HttpPost]
PartialViewResult ActionName(MyActionFilters myActionFilers)// this is magic
{
  /*you can access the properties here like myActionFilers.Property1 and pass the 
    same object after any manipulation. Or if you decided have a model which contains 
    a variable to hold the search results as well. That is good.*/

   return PartialView(myActionFilers);
}

これまでのところ、これは参照するのに良い例です。

jquery.unobtrusive-ajax.jsまた、ビューにスクリプト参照を追加することを忘れないでください。そうでない場合、Ajaxは影響しません。与えられた例では、あなたが見ることができるように、彼は_Layoutでそれを行いました。

PS:ビューに渡されるモデルのプロパティを賢く選択してAjaxをお楽しみください!!

于 2013-02-25T18:08:03.833 に答える
0

フォームの入力名を ViewModel のプロパティに設定する必要があります。MVC はいくつかの魔法を実行して作成します。次に例を示します。

public class FormViewModel {
    public string input1 {get;set;}
    public string input2 {get;set;}
    // and so on
}

次に、アクションで:

public ActionResult FormPost(FormViewModel model) {
    // you'll have access to model.input1, model.input2, etc
}

最後に、たとえば HTML フォームで次のように作成します。

<input type="text" name="input1" />
<input type="text" name="input2" />

または使用できHtml.TextBoxFor(model => model.Input1)、ヘルパーはすべてに正しく名前を付けます。

于 2013-02-25T17:48:02.140 に答える
0

入力タグの name プロパティには、オブジェクト名 ("MyActionFilters") をプレフィックスとして付ける必要があります。

例えば:

<input type="text" name="MyActionFilters.YOUR_PROPERTY_NAME" />

ところで、アクション メソッドには HttpPost 属性で注釈を付ける必要があります。

[HttpPost] ActionResult ActionName(MyActionFilters myFilters)

于 2013-02-25T17:49:46.807 に答える