具有动态金额

时间:2016-05-13 14:17:21

标签: c# asp.net-mvc model-view-controller mvc-editor-templates

我为我的模型(Views / Shared / EditorTemplates / List.cshtml)中的列表创建了一个简单的EditorTemplate:

@model List<string>
foreach (var str in Model)
{
    <li>
        @Html.LabelFor(m => str, "My Label")
        @Html.TextBoxFor(m => str)
        @Html.ValidationMessageFor(m => str)
    </li>
}

在我的视图中调用(Views / Profile.cshtml):

@using (Html.BeginRouteForm(MvcSettings.SitecoreRouteName, FormMethod.Post, new { data_abide = "true", id = "myForm", enctype = "multipart/form-data" }))
{
    @Html.Sitecore().FormHandler("User", "UpdateProfile")
    @Html.ValidationSummary()

    @Html.EditorFor(x => x.ListTest, new { htmlAttributes = new { id = "listTestId" } })

    <input type="submit" value="Submit" />
}

受控行动:

public ActionResult UpdateProfile(IntranetContactViewModel formModel)
{
    // Save information to DB
}

型号:

public class IntranetContactViewModel
{
    public List<string> ListTest { get; set; }

    public IntranetContactViewModel()
    {
        ListTest = new List<string>{"abc","def","ghi"};
    }
}

当列表包含3个字符串时,视图将呈现3个文本框。

<input class="text-box single-line" id="listTestId" name="ListTest[0]" type="text" value="abc">
<input class="text-box single-line" id="listTestId" name="ListTest[1]" type="text" value="def">
<input class="text-box single-line" id="listTestId" name="ListTest[2]" type="text" value="ghi">

但是,用户可以插入的选项数量应该是无限的。如果填写了所有3个文本框,则应显示第4个(理想情况下,如果超过2个文本框为空,则应删除1个。)

我尝试通过添加一个具有相同签名的文本框(在name属性中的计数器中添加1)来尝试自己这样做。

<input class="text-box single-line" id="listTestId" name="ListTest[3]" type="text" value="TEST">

但是当我提交此内容时,模型无法识别,也不会将其返回给Controller。 有没有办法让我的模型知道它现在还需要跟踪这个新的文本框?或者这根本不可能?

请告知。

1 个答案:

答案 0 :(得分:0)

@Html.EditorFor(x => x.ListTest, new { htmlAttributes = new { id = "listTestId" } })

应该是:

@Html.EditorFor(x => x.ListTest)

我强迫所有文本框获得相同的ID,这搞砸了系统。 感谢评论中的每个人提供帮助!