繁体   English   中英

ASP.NET MVC从局部视图传递数据

[英]ASP.NET MVC pass data from partial view

如何在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>

}

在Submit函数上,参数selectedImagesForDelete为null。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(Post post,string[] selectedImagesForDelete)
    {...........}

这与您使用局部模型无关,而与MVC中的Modelbinder的工作原理有关。 对于可迭代的已过帐项目,模型联编程序期望使用ListProperty[index].ModelProperty形式的字段名称。 问题是Html.*系列帮助程序无法正确创建此名称,除非它们传递了索引值,而foreach无法实现该索引值。 解决方案是简单地使用for ,而不是:

@for (var i = 0; i < images.Count(); i++)
{
    Html.EditorFor(m => image[i].SomeProperty)
}

通过传入已索引的值( images[i] ),帮助程序将认识到它需要在名称中添加正确的已索引html前缀,以便Modelbinder在将值重新发布后将知道在哪里填充该值。

尽管就您而言,您似乎实际上只是手动为字段指定了HTML,这很好,但是此时您有责任正确设置名称值。

我相信您的name属性需要在名称中包含索引:

创建一个称为index的索引变量,并在每次迭代后将其递增

<input type="checkbox" name="selectedImagesForDelete[index]" value="2">

实际上,这是javascript文件的问题。 该复选框从未被选中。

<input type="checkbox"  name="selectedImagesForDelete" value="@img.ID"  />

但是我解决了这个问题,现在一切正常。

但是,感谢您尝试帮助我。 我很感激。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM