我为我的模型(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。 有没有办法让我的模型知道它现在还需要跟踪这个新的文本框?或者这根本不可能?
请告知。
答案 0 :(得分:0)
@Html.EditorFor(x => x.ListTest, new { htmlAttributes = new { id = "listTestId" } })
应该是:
@Html.EditorFor(x => x.ListTest)
我强迫所有文本框获得相同的ID,这搞砸了系统。 感谢评论中的每个人提供帮助!