0

我正在构建一个带有一堆文本框的 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" });
    }
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 属性,并且您的 post 操作期望您的模型类作为其参数,您应该能够在创建文本框时执行以下操作:

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