1

Ajax.ActionLinkヘルパーを使用していて、コントローラーアクションにいくつかのパラメーターを渡す必要がある場合、モデルにバインドされていないTextAreaの値を取得するにはどうすればよいですか?

たとえば、ユーザーがテキストエリアに入力し、[保存]をクリックして、テキストエリアの値をコントローラーアクションに送信してさらに処理するようにします。

ViewBagを使用しますか?もしそうなら、どうすればDOM要素の値をViewBagに割り当てることができますか?

4

2 に答える 2

3

私は以前にこの問題をいじったことがありますが、を使用して回避できますAjax.BeginForm

次の例を見てください。

PersonNameの1つの文字列プロパティを持つモデルがあります。

意見

@model Application.Models.Person

<fieldset>
    <legend>Form</legend>
    @using (Ajax.BeginForm("SendUp", "Home", new AjaxOptions
    {
        HttpMethod = "POST",
        OnComplete = "window.location.href = 'Index'"
    }))
    {  
        <p>
            @Html.LabelFor(model => model.Name)
            @Html.EditorFor(model => model.Name)
        </p>
        <p>
            @Html.TextArea("ta")
        </p>
        <p>
            <input type="submit" value="Submit" />
        </p>
    }
</fieldset>

コントローラ

    [HttpPost]
    public ActionResult SendUp(string Name, string ta)
    {
        string s = ta;
        // Process stuff here
        // Go to another action or whatever
        return RedirectToAction("Index");
    }

を使用すると、ページ上のモデルにバインドされていない場合でもAjax.BeginForm()、データをコントローラーに送信できます。Html要素のプロパティが、コントローラーが必要とするパラメーターと同じ名前であることを確認する必要があります。name

だからあなたがのコントローラーメソッドを持っているなら

public ActionResult SendUp(string Name, string ta)

Nameの名前とta内部のHtml要素が必要になりAjax.BeginForm()ます。

これを行うには、要素全体を書き出すことができます。

<input type="text" id="Name" name="Name" />

@Htmlまたは、ヘルパーを使用できます。

@Html.Editor("Name")

@Htmlヘルパーの名前を指定すると、その値がプロパティとして設定され、idプロパティにも設定さnameれます。

于 2012-06-28T15:29:29.687 に答える
1

ViewBagはサーバー側の概念です。ページがレンダリングされると、存在しなくなります。ページ上のフィールドをアクションパラメーターと宣言的にリンクする方法はありません。

やりたいことを行うには、次の2つのオプションがあります。-Ajax.ActionLinkヘルパーを削除し、Javascriptを記述します(申し訳ありませんが、実際にはサポートできません)-代わりにAjax.BeginFormを使用して、関連するフィールドをフォームに入力します、送信ボタンをクリックすると、フォームがajaxを介してアクションに送信されます。

于 2012-06-27T16:34:25.083 に答える