我上传了一个包含歌曲的文件。我显示了每首歌曲的属性。如果我上传了一首包含3首歌曲的文件。视图显示如下。
music id:.... music id:.... music id:.... song Name :.... song Name :.... song Name :.... Music director :... Music director :... Music director :...
我有这样的观点
@model List<MusicBusinessLayer.Music>
@using (Html.BeginForm("Create", "Home", FormMethod.Post, new { }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Music</legend>
@for (int i = 0; i < Model.Count();i++ )
{
<div style="float:left;">
<div class="editor-label">
@Html.LabelFor(model => Model[i].Music_Id)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model[i].Music_Id)
@Html.ValidationMessageFor(model => Model[i].Music_Id)
</div>
<pre><div class="editor-label">
@Html.LabelFor(model => Model[i].Song_Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model[i].Song_Name)
@Html.ValidationMessageFor(model => Model[i].Song_Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => Model[i].Music_Director)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model[i].Music_Director)
@Html.ValidationMessageFor(model => Model[i].Music_Director)
</div>
}
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
我使用像这样的控制器
public ActionResult Create(List<Music> musicfiles)
{
//......
}
如何验证view.i.e中生成的控件;是否给出了所有字段?
答案 0 :(得分:2)
数据注释无法跨集合运行。相反,您需要在操作中手动验证。
检查这个问题可能有用 MVC 3 Unobtrusive validation of a list
答案 1 :(得分:1)
您可以将DataAnnotations验证属性添加到Music
类的属性中,如:
public class Music
{
[Required]
public int Music_Id {get; set;}
[Required]
public string Song_Name { get; set; }
public string Music_Director { get; set; }
}
然后根据OP中的一个给出以下视图(我刚删除了一些未关闭的标签):
@model List<MusicBusinessLayer.Music>
@using (Html.BeginForm("Create", "Home", FormMethod.Post, new { }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Music</legend>
@for (int i = 0; i < Model.Count();i++ )
{
<div class="editor-label">
@Html.LabelFor(model => Model[i].Music_Id)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model[i].Music_Id)
@Html.ValidationMessageFor(model => Model[i].Music_Id)
</div>
<div class="editor-label">
@Html.LabelFor(model => Model[i].Song_Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model[i].Song_Name)
@Html.ValidationMessageFor(model => Model[i].Song_Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => Model[i].Music_Director)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model[i].Music_Director)
@Html.ValidationMessageFor(model => Model[i].Music_Director)
</div>
}
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
以下虚拟控制器方法:
public ActionResult Create()
{
List<Music> musicFiles = new List<Music>()
{
new Music { Music_Id = 123, Song_Name = "foo1" },
new Music { Music_Id = 456, Song_Name = "foo2" }
};
return View(musicFiles);
}
[HttpPost]
public ActionResult Create(List<Music> musicFiles)
{
if (ModelState.IsValid)
return RedirectToAction("Index");
return View(musicFiles);
}
当ModelState.IsValid
或Create
列表中的任何项目Music_Id
被发布为空时,您应该在POST Song_Name
控制器方法中看到musicFiles
为false值。