我正在用一堆文本框构建一个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" });
}
答案 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]" />