【问题标题】:Passing dynamically generated textbox values to controller in ASP.NET MVC将动态生成的文本框值传递给 ASP.NET MVC 中的控制器
【发布时间】:2015-10-03 17:41:37
【问题描述】:

我有一些表单,我想在单击 + 按钮时自动生成新的文本框,然后我想将其提交给 Candidates 控制器中的 CandidateRegister 操作方法。

@model SourceTreeITMatchmaking.Models.CandidateRegisterViewModel

候选人视图

@using (Html.BeginForm("CandidateRegister", "Candidates"))
{
     <div id="myTechnologies">
             <div class="row">
                   <div class="col-sm-6" style="padding-left: 0;">
                       @Html.TextBoxFor(m => m.SelectedMyTechnologies.Technology, new {@class="form-control", placeholder="C#, Java, Sql Server..."})
                    </div>
              </div>
        </div>
        <hr class="mt60">
        <div class="clearfix">
                 <input type="submit" class="btn btn-default btn-large pull-right" value="Register candidate!">
        </div>
}

在 (+) 按钮单击时添加新文本框的 jQuery 函数

$("#add-technology-candidate").click(function () {
    var firstDiv = $(' <div class="row"> <div class="col-sm-6" style="padding-left: 0;"> ' +
        ' <input type="text" class="form-control" placeholder="C#, Java, Sql Server..." /> </div>');
    $("#myTechnologies").append(firstDiv.append(deleteButton));
});

我用于强类型模型的 CandidateRegisterViewModel 的一个属性

public class CandidateRegisterViewModel
{
    public SelectedMyTechnologies SelectedMyTechnologies { get; set; }
}

/我在 CandidateRegisterViewModel 中使用的属性/

public class SelectedMyTechnologies
{
        public List<string> Technology { get; set; }
}

长话短说->我想在 (#add-technology-candidate) 按钮单击时生成文本框,然后将用户输入的数据作为列表传递给我的控制器。正如我现在的代码一样,我只能从第一个文本框(不是动态生成的文本框)传递数据。我应该如何更改 jQuery 方法以支持这两种类型?

提前致谢。

【问题讨论】:

    标签: javascript c# jquery asp.net asp.net-mvc


    【解决方案1】:

    由于您的属性是List&lt;string&gt;,您只需为动态创建的文本框提供与该属性匹配的名称属性

     <input type="text" name="SelectedMyTechnologies.Technology" ... />
    

    请注意,这仅适用于 string 或值类型的集合。对于复杂对象的集合,您需要按照this answer 包含索引器

    【讨论】:

    • 谢谢。我不明白整个想法。如果我有一个带有字符串和 SelectList 属性的视图模型,而不是 SelectedMyTechnologies 中的单个列表,那么它会是什么样子?索引器如何在这种特定情况下工作?
    • 你有没有看过我给你的链接?目前,您在没有name 属性的情况下动态创建输入,因此它们不会回发。对于简单类型的集合,如果您有多个带有&lt;input name="Address" /&gt; 的输入,DefaultModelBinder 将绑定(例如)List Address`。但是,如果您的属性是 List&lt;Address&gt;,其中 Address 包含属性,那么您将需要 &lt;input name="[0]Address.Street" /&gt;&lt;input name="[1]Address.Street" /&gt; 等。
    • 是的,我当然看到了你给我的链接,抱歉给我添麻烦了。现在我完全明白了:) 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多