之前我曾经问过这个,但是没有任何代码可以看,这里我有一个实现,我想知道是否有更好的方法来实现这一点。
我想要一个重复的html部分:
<div>
<input id=id1 name=id1 type=text/>
</div>
<div>
<input id=id2 name=id2 type=text/>
</div
etc
这可能包含任意数量的输入框,这些输入框映射到我在模型中的“某事物”类列表中,我现在用视图执行此操作
@using (Html.BeginForm())
{
for (int i = 0; i < Model.Somethings.Count; i++)
{
Model.Index = i;
@Html.Action("Index", "HtmlSection", Model);
}
// other stuff
}
和部分视图
@{
int index = Model.Index;
}
@Html.TextBoxFor(x => x.Somethings[index].TheProperty)
模型看起来像这样
public class HtmlSectionModel
{
public List<Something> Somethings { get; set; }
public int Index { get; set; }
}
最后,行动看起来像这样
public ActionResult Index(HtmlSectionModel model)
{
// do stuff
}
对我而言,这有效但不理想
在我看来,这是一种常见的模式,所以其他人必须以其他方式解决它?
我想我之后的内容是MVC等同于Asp.Net UserControls / Webcontrols(似乎是子动作/部分视图),但是,与模型绑定相结合似乎需要唯一的名称
答案 0 :(得分:1)
我想要的东西可以用编辑器模板完成
控制器
public class UsesEditorController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View(new SomeModel());
}
[HttpPost]
public ActionResult Index(SomeModel model)
{
return View(model);
}
}
模型
public class Blob
{
public string Name { get; set; }
public string Address { get; set; }
public Blob()
{
Name = string.Empty;
Address = string.Empty;
}
}
public class SomeModel
{
public List<Blob> Blobs { get; set; }
public SomeModel()
{
int count = 5;
this.Blobs = new List<Blob>(count);
for (int i = 0; i < count; i++)
{
this.Blobs.Add(new Blob());
}
}
}
查看
@model MyProject.Areas.EditorTemplates.Models.SomeModel
@using (Html.BeginForm())
{
for (int i = 0; i < Model.Blobs.Count; i++)
{
@Html.EditorFor(m => m.Blobs[i], "CustomEditorForBlob");
}
<input type="submit" value="Send data back" />
}
和编辑器,它可以在视图文件夹中的任何位置,因为我直接引用它
@model MyProject.Areas.EditorTemplates.Models.Blob
@Html.TextBoxFor(m => m.Name)
@Html.TextBoxFor(m => m.Address)
使用以下ID进行渲染:
<input class="k-textbox" id="Blobs_1__Name" name="Blobs[1].Name" ...
所以这给了我
答案 1 :(得分:0)
在我看来,您想要完成的是输入的唯一ID,您当然不需要部分执行此操作。您可以在for循环中输出文本框,如下所示:
@ Html.TextBoxFor(x =&gt; x.Somethings [i] .TheProperty)
这将生成一个像id =“Somethings_1_TheProperty”的唯一ID。如果你不喜欢那个id,你当然可以用这样的东西制作自己的东西:
@Html.TextBoxFor(x => x.Somethings[i].TheProperty, new {id="id" + (i+1)})