0

私のアプリケーションは、ヘルパー クラスを使用してカスタム属性を入力コントロールに書き込みます。また、UserControl を動的にロードしているため、FormCollection を使用して投稿された値を取得する必要があります。FormCollection オブジェクトから属性値にアクセスする方法はありますか。

例:

<input type="text" name="textBox1" value="harsha" customAttr1 = "MyValue" />

私の質問は、コントローラー内など、上記から customAttr1 の値にアクセスする方法です。

事前に助けてくれてありがとう..

4

3 に答える 3

0

ルークがすでに言ったように..フォームコレクションはディクショナリオブジェクトであり、名前と値のペアのみを保持します..それをコントローラーに取得するには、そのカスタム属性をajaxを介して渡す必要があります。

var form = $("#formid").serialize(),
    custom = $("input:text").attr("customAttr1").val();
$.ajax({ 
    type: "POST", 
    url: "/controller/ProcessData", 
    data:{collection :form,customAttr: custom },
    dataType: "html", 
    traditional: true
});

コントローラーでは、次の構文が必要です。

public ActionResult ProcessData(FormCollection collection ,string customAttr)
{

複数のカスタム値を渡す必要がある場合は、ajax リクエストから文字列配列を投稿し、コントローラーの署名を次のようにする必要があります。

public ActionResult ProcessData(FormCollection collection ,string[] customArray)
    {
于 2011-03-31T18:58:29.167 に答える
0

ヘルパーはどのように構成されていますか? HtmlHelper を拡張している場合は、NameValueCollection である ViewContext.HttpContext.Request.Form にアクセスできます。FormCollection は、値をアクション メソッドにポストするためにモデル バインダーによって使用されます。他のどこにも公開されていません。

HTH。

于 2011-01-27T13:50:54.353 に答える
0

簡単な答えは恐れることはありません.formCollectionには基本的なキーと値の情報のみが含まれています.

コントローラーに入ったら、その情報を再水和する方が簡単でしょうか? なんらかのメカニズムを使用して、渡したものを識別します。

別の方法として、基本タイプにマップされるコントロールのリストがある場合は、各コントロールをループできます。

MVC はちょっとした魔法で、プロパティをモデルやリストにマップすることができます。

コントロールのリストを持つモデルがある場合:

public class Control
{
    String Value {get; set;}
    String Attribute1 {get; set;}
}

public class ControlViewModel
{
    IList<Control> Controls {get; set;}
}

次に、あなたの見解で:

for(var i = 0; i<controls.Count;i++)
{
   // Obviously this isnt complete right i needs to increment from 0; would be build using your htmlhelpers.
    <input id="Controls[i]_Value" name="Controls[i].Value" type="text" value="hello" />
    <input id="Controls[i]_Attribute1" name="Controls[i].Attribute1" type="hidden" value="Attribute" />
}

httppost アクションで を収集するControlViewModelと、Controlsリストにデータが入力されます。

私はこれをテストしていません。おそらくたくさんのエラーがありますが、始めるにはこれで十分です。これについて議論している投稿があります。投稿後に見つけた場合は追加します。

于 2011-01-27T14:02:41.873 に答える