【问题标题】:ASP.NET MVC pass data from partial viewASP.NET MVC 从局部视图传递数据
【发布时间】:2014-06-11 05:16:38
【问题描述】:

如何在 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)
    {...........}

【问题讨论】:

  • 确保在浏览器视图源中,复选框已正确绑定,如果正确,请尝试使用 Request["selectedImagesForDelete"] 获取数组而不是参数

标签: asp.net asp.net-mvc asp.net-mvc-partialview actionresult


【解决方案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,这很好,但您有责任在这一点上正确获取名称值。

【讨论】:

    【解决方案2】:

    我相信你的 name 属性需要在 name 中有索引:

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

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

    【讨论】:

      【解决方案3】:

      其实是javascript文件的问题。复选框从未被选中。

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-07-14
        • 2016-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多