0

たくさんのテキスト ボックスを含む MVC フォームを作成しています。ただし、私のモデルには文字列のリストが必要です。私がやろうとしているのは、ユーザーが送信を押すと、フォームが投稿される前に、テキスト ボックス内のすべての値を取得し、それをリストに追加して送信用のモデルに追加することです。どうすればこれができるのか、私は立ち往生していますか?

これを行う必要がある理由は、フィールドの数が増える可能性があり、ページがそれに適応するという点で、フォームを動的にする必要があるためです。モデルはフォームの長さに適応する必要があるため、個々のフィールドをモデルにハードコードすることはできません。

これまでの私のコードは次のとおりです。

HTML

@using (Html.BeginForm(new { id = "feedbackForm" }))
{
<fieldset>

    @foreach (Feedback_Num_Questions questionForm in FeedbackSurveyQuestions)
    {
        string textBoxID = "feedbackq";

        questionNumberTextBoxes++;

        textBoxID = textBoxID + questionNumberTextBoxes.ToString();

        <input type="text" id="@textBoxID" />
    }

    <input type="text" id="txtAdditionalComments" />

    <input type="submit" value="Create" name="btnFeedbackSubmit" id="btnSubmitFeedbackForm" />

    </fieldset>
}

モデル:

    public class PostCourseFeedbackModel
    {
        public List<string> responseList { get; set; }
        public decimal pelID { get; set; }
        public string employeeid { get; set; }
    }

助けてくれてありがとう!

更新: FLEM から応答を得た後、コードを少し修正しました。まだ完全には機能していませんが、誰かが問題を発見できることを望んでいました:

HTML:

 @using (Html.BeginForm(new { id = "feedbackForm" }))
 {
<fieldset>

    @{

    int i = 0;



    foreach (Feedback_Num_Questions questionForm in FeedbackSurveyQuestions)
    {
        i++;
        string textBoxID = "feedbackq" + i.ToString();
        @Html.TextBoxFor(m => m.responseList[i], new { @id = textBoxID });
    }



    <input type="submit" value="Create" name="btnFeedbackSubmit" id="btnSubmitFeedbackForm" />
        }
    </fieldset>
 }

モデルは変わらず…

更新 - flem の要求に応じて、アクションを投稿しています。ただし、データで何をするつもりかをまだコーディングしていないため、これは必要最小限のアクションです...

    [HttpPost]
    public ActionResult PostCourseFeedback(PostCourseFeedbackModel feedback)
    {

         return RedirectToAction("FeedbackSubmitted", "Feedback", new { status = "success" });
    }
4

2 に答える 2

1

私はモデルバインダーにあなたのためにその大変な仕事をさせます。

@using (Html.BeginForm(new { id = "feedbackForm" }))
{
    <fieldset>
    @{
        int i = 0;
        foreach (Feedback_Num_Questions questionForm in FeedbackSurveyQuestions)
        {
            @Html.EditorFor(m => m.responseList[i++])
        }
    }

        <input type="text" id="txtAdditionalComments" />

        <input type="submit" value="Create" name="btnFeedbackSubmit" id="btnSubmitFeedbackForm" />

    </fieldset>
}

実用的なサンプルは次のとおりです。

モデルとコントローラー:

using System.Collections.Generic;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class MyController : Controller
    {
        public ActionResult MyAction(MyModel Model)
        {
            return View(Model);
        }

    }
    public class MyModel
    {
        public List<string> TextFields { get; set; }
    }
}

意見:

@model MvcApplication1.Controllers.MyModel

@using (Html.BeginForm())
{
    for (int i = 0; i < 3; i++)
    {
        string id = "txt" + i.ToString();

        @Html.TextBoxFor(m => m.TextFields[i], new { id = id })
    }

    <input type="submit" value="Post" />

    if (Model.TextFields != null)
    {
        foreach (string textField in Model.TextFields)
        { 
            <div>Posted Field: @textField</div>
        }
    }
}
于 2012-07-13T19:35:59.337 に答える
0

テキストボックスの id 属性と name 属性を変更し、ポストアクションがモデルクラスをパラメーターとして期待している場合、テキストボックスを作成するときに次のようなことができるはずです。

<input type="text" id="id="responseList_@textBoxID__" name="responseList[@textBoxID]" />
于 2012-07-13T19:16:52.347 に答える