在发布表单之前,将所有文本框值聚合到列表中

时间:2012-07-13 19:01:40

标签: c# asp.net html asp.net-mvc-3 razor

我正在用一堆文本框构建一个MVC表单。但是,我的模型需要一个字符串列表。我要做的就是拥有它,所以当用户点击提交时,在表单发布之前,它会获取文本框中的所有值,将其添加到List并将其附加到模型以进行提交。我被困在如何做到这一点?

我需要这样做的原因是我需要表单是动态的,因为#字段可以增长并且页面适应那个。我不能将单个字段硬编码到模型中,因为模型需要适应表单的长度。

到目前为止,这是我的代码:

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>
 }

该模型保持不变......

更新 - 根据弗拉姆的要求,我发布了我的行动。然而,这是一个准系统行动,因为我还没有编写我计划对数据做什么......

    [HttpPost]
    public ActionResult PostCourseFeedback(PostCourseFeedbackModel feedback)
    {

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

2 个答案:

答案 0 :(得分: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>
        }
    }
}

答案 1 :(得分:0)

我相信如果您修改文本框的id和name属性,并且您的帖子操作期望您的模型类作为其参数,那么在创建文本框时应该能够执行以下操作:

<input type="text" id="id="responseList_@textBoxID__" name="responseList[@textBoxID]" />