首页 > 解决方案 > 如何将动态创建的文本框值从视图传递到 MVC 中的控制器

问题描述

我想将动态生成的文本框中的所有值从视图传递到控制器。

我的模型:

public class QuestionModel
{
    [Required(ErrorMessage = "{0} is required")]
    [Display(Name = "Question here")]
    public string Question { get; set; }
}

我的观点:

@using (Html.BeginForm("Add_Question", "Home", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
        {
            <div class="form-group">
                    //here I'm generating dynamic textboxes
                    @for (int i = 1; i <= numberOfQuestions; i++)
                    {
                        <div class="col-md-12">
                            @Html.LabelFor(model => model.Question, new {  })
                            @Html.TextBoxFor(model => model.Question, "", new { @required = "required", @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.Question, "", new { @class = "text-danger" })
                        </div>
                    }
                </div>

                <div class="form-group">
                    <div class="col-md-12">
                        <input type="submit" value="Done" class="btn-success form-control" />
                    </div>
                </div>
        }

我的控制器:

public ActionResult Add_Question()
    {
         return View();
    }

    [HttpPost]
    public ActionResult Add_Question(QuestionModel model)
    {
        //Get all textbox values here
        return RedirectToAction("Home", "Home");
    }

我应该为此创建一个字符串列表吗?如果是,那怎么办?请帮忙。

标签: c#htmlasp.net-mvc

解决方案


您可以稍微修改 viewmodel 属性并在视图内循环以包含每个元素,List<string>如下所示:

模型

[Display(Name = "Question here")]
public List<string> Question { get; set; }

看法

@for (int i = 0; i < numberOfQuestions; i++)
{
    <div class="col-md-12">
    @Html.LabelFor(model => model.Question)
    @Html.TextBoxFor(model => model.Question[i], "", new { @required = "required", @class = "form-control" })
    </div>
}

请注意,集合索引从零开始,因此第一个问题的索引应为 0。

附加说明:

您可能需要为此参考List<string>中提供的创建自定义验证属性,因为默认情况下仅检查 null 而不是整个集合项的总数(空集合不为 null)。RequiredAttributeCount = 0

相关问题:

列表项的 Asp.net razor 文本框数组


推荐阅读