Asp.net mvc 创建重复HTML节的更好方法
我以前问过一次这个问题,但没有任何代码可以看,这里我有一个实现,我想知道是否有更好的方法来完成这一点 我想要一个重复的html部分,如下所示:Asp.net mvc 创建重复HTML节的更好方法,asp.net-mvc,Asp.net Mvc,我以前问过一次这个问题,但没有任何代码可以看,这里我有一个实现,我想知道是否有更好的方法来完成这一点 我想要一个重复的html部分,如下所示: <div> <input id=id1 name=id1 type=text/> </div> <div> <input id=id2 name=id2 type=text/> </div etc 模型是这样的 public class HtmlSectionModel {
<div>
<input id=id1 name=id1 type=text/>
</div>
<div>
<input id=id2 name=id2 type=text/>
</div
etc
模型是这样的
public class HtmlSectionModel
{
public List<Something> Somethings { get; set; }
public int Index { get; set; }
}
public ActionResult Index(HtmlSectionModel model)
{
// do stuff
}
对我来说,这是可行的,但并不理想
- 局部视图现在只能在此上下文中使用,它使用顶级模型,而不仅仅是“Something”类
- 为了获得绑定的唯一名称,我必须在模型中传递一个索引,如果我没有这样做,那么textbox将具有相同的名称/id
我想我在这里想要的是与Asp.Net UserControls/Webcontrols(似乎是子操作/局部视图)等效的MVC,但是,结合似乎需要唯一名称的模型绑定,在我看来,您试图实现的是输入的唯一ID,您当然不需要局部ID来实现这一点。您可以在for循环中输出文本框,如下所示: @Html.TextBoxFor(x=>x.Somethings[i].TheProperty) 这将生成一个唯一的id,如id=“Somethings\u 1\u TheProperty”。如果您不喜欢该id,您当然可以使用以下内容制作自己的id:
@Html.TextBoxFor(x => x.Somethings[i].TheProperty, new {id="id" + (i+1)})
我想要的可以通过编辑器模板实现 控制器
public class UsesEditorController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View(new SomeModel());
}
[HttpPost]
public ActionResult Index(SomeModel model)
{
return View(model);
}
}
模型
这将使用如下ID进行渲染:
<input class="k-textbox" id="Blobs_1__Name" name="Blobs[1].Name" ...
假设有3个输入和一个范围,我想在其他页面上重复此模式,并将其包含在for循环中
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)
<input class="k-textbox" id="Blobs_1__Name" name="Blobs[1].Name" ...