首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BeginCollectionItem不返回索引的部分显示

使用BeginCollectionItem不返回索引的部分显示
EN

Stack Overflow用户
提问于 2015-08-14 11:17:06
回答 1查看 294关注 0票数 2

更新代码--如果我使用一个按钮,那么AJAX调用就不能工作,在chrome调试中永远不会点击,如果我使用动作链接尝试添加它自己发送给部分视图的部分视图,而不是按预期在索引中。

<input type="button" id="addItem" value="Add" />

而不是

@Html.ActionLink("Add", "RequestedIpManager", null, new {id = "addItem"});

试图通过使用在线指南中更复杂的模型结构来将BeginCollectionItem付诸实践。

我已经取消了after按钮的行为--它在转到分部后不会返回到索引。

因此,我在部分视图中结束,处理代码的方式与处理here的方式相同。

我怎样才能让它回到指数呢?唯一的区别是索引模型,它不是IEnumerable,但是对象是,我使用它不正确吗?

代码:

指数

代码语言:javascript
复制
@model Project.Models.Pa_Ipv4
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="ui-block-a">
                    <p>Company Name</p>
                    <span>
                        @Html.EditorFor(m => m.companyDetails.name)
                        @Html.ValidationMessageFor(m => m.companyDetails.name)
                    </span>
                </div>
@using (Html.BeginForm())
            {
                <div id="editorRows">
                    @foreach (var item in Model.requestedIps)
                    {
                        @Html.Partial("ReqIpView", item)
                    }
                </div>
                <div data-role="controlgroup" data-type="horizontal">
                    <input type="button" id="addItem" value="Add" />
                </div>
            }
            <br />
@section scripts
{
    <script type="text/javascript">
            $("#addItem").click(function() {
                $.ajax({
                    url: @Url.Action("RequestedIpManager"),
                    cache: false,
                    success: function(html) { $("#editorRows").append(html); }
                });
                return false;
            });
            $('#editorRows').on('click', '.deleteRow', function() {
                $(this).closest('.editorRow').remove();
            });
    </script>
}

部分

代码语言:javascript
复制
    @model Project.Models.IpAllocation
@using HierarchicalControlsDemo.Helpers
<div class="editorRow">
    @using (Html.BeginCollectionItem("requestedIps"))
    {
        <div class="ui-grid-c ui-responsive">
            <div class="ui-block-a">
                <span>
                    @Html.TextBoxFor(m => m.subnet)
                </span>
            </div>
            <div class="ui-block-b">
                <span>
                    @Html.TextBoxFor(m => m.cidr)
                </span>
            </div>
            <div class="ui-block-c">
                <span>
                    @Html.TextBoxFor(m => m.mask)
                </span>
            </div>
            <div class="ui-block-d">
                <span>
                    <a href="#" class="deleteRow">Dlt</a>
                </span>
            </div>
        </div>
    }
</div>

控制器

代码语言:javascript
复制
public ActionResult Index()
        {
            Pa_Ipv4 paipv4 = new Pa_Ipv4
            {
                requestedIps = new List<IpAllocation>
                {
                    new IpAllocation {cidr = "", mask = "", subnet = "", allocationType = "requestedIp"}
                },
                existingIps = new List<IpAllocation>
                {
                    new IpAllocation {cidr = "", mask = "", subnet = "", allocationType = "existingIp"}
                }
            };
            return View(paipv4);
        }
public ViewResult RequestedIpManager()
        {
            return View("ReqIpView", new IpAllocation());
        }

模型-为了清晰起见

代码语言:javascript
复制
    public class Pa_Ipv4
    {
        public Details companyDetails { get; set; } // just a basic holding class for company input
        public List<IpAllocation> requestedIps { get; set; }
    }
public class IpAllocation
    {
        [Key]
        public int id { get; set; }
        [Required]
        public string allocationType { get; set; }
        [Required]
        public string subnet { get; set; }
        [Required]
        public string cidr { get; set; }
        [Required]
        public string mask { get; set; }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-14 15:04:38

这有几个小问题。

ajax无法正常工作,因为@url.action(actionName)没有在浏览器上返回字符串值,而浏览器上的字符串值不是valied调试器。

编辑-更改为最佳实践网址。

为了避免这种情况,您的部分脚本应该如下所示:

$(function() { $('#addItem').on('click', function() { $.ajax({ url: 'Url.Action("RequestedIpManager")', cache: false, success: function(html) { $("#editorRows").append(html); } }); return false; }); });

然后在您的控制器中,按其原样进行以下更改--您的控制器正在返回一个完整的视图,因此当单击实际工作时,您将得到一个完整的页面:

public ActionResult RequestedIpManager() { return PartialView("ReqIpView", new IpAllocation()); }

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32008783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档