如何从ASP.NET MVC中的提交表单上的部分视图传递数据。
@using (Html.BeginForm("Edit", "BlogPost", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
................
@Html.Partial("PostImagesForPost",Model.PostImages)
}
PostImagesForPost - 局部视图:
@model IEnumerable<Blog.Models.PostImage>
<script type="text/javascript" src="~/Scripts/jquery.zoom.min.js"></script>
<div>
@{
List<Blog.Models.PostImage> images = Model.ToList();
<ul class="images">
@foreach (var img in images)
{
string parameterValue_small = "~/BlogPhotos/120/" + img.Photo.ToString();
string parameterValue_big = "~/BlogPhotos/600/" + img.Photo.ToString();
<li>
<div id="jquery-image-zoom-example">
<span data-postid="@img.ID" data-delete="true" class="deletespan"></span>
<a href="@Url.Content(parameterValue_big)">
<img src="@Url.Content(parameterValue_small)" data-postid="@img.ID" class="zm" onclick="$('.jquery-image-zoom img').click()" />
</a>
<input type="checkbox" checked="checked" name="selectedImagesForDelete" style="display:none;" data-postid="@img.ID" value="@img.ID" />
</div>
</li>
}
</ul>
}
在提交函数上,参数 selectedImagesForDelete 为空。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Post post,string[] selectedImagesForDelete)
{...........}
答案 0 :(得分:1)
这与您使用部分事实无关,而且与MVC中的模型绑定器的工作方式有关。对于可迭代的已过帐项目,模型绑定器需要ListProperty[index].ModelProperty
形式的字段名称。问题是Html.*
系列助手不会正确创建此名称,除非传递索引值,而foreach
无法实现。解决方案是简单地使用for
,而不是:
@for (var i = 0; i < images.Count(); i++)
{
Html.EditorFor(m => image[i].SomeProperty)
}
通过传入索引(images[i]
)的值,帮助程序会识别出需要在名称中添加正确的索引html前缀,以便模型绑定器能够理解值的填充位置什么时候回来。
虽然,在您的情况下,您似乎实际上只是手动指定字段的HTML,这很好,但您在此时负责获取正确的名称值。
答案 1 :(得分:0)
我相信你的name属性需要在名称中包含索引:
创建一个名为index的索引变量,并在每次迭代后递增它
<input type="checkbox" name="selectedImagesForDelete[index]" value="2">
答案 2 :(得分:0)
实际上这是javascript文件的问题。从未检查过复选框。
<input type="checkbox" name="selectedImagesForDelete" value="@img.ID" />
但我解决了这个问题,现在一切都像预期的那样。
但是感谢您试图帮助我。我很感激。