加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.Net MVC4将“创建视图”绑定到包含List的模

发布时间:2020-12-16 06:22:44 所属栏目:asp.Net 来源:网络整理
导读:你好,在互联网上,我有一个有趣的难题: 是否可以绑定视图以创建对象,如果该对象包含纯粹使用MVC视图/部分视图的其他对象的列表? 男人,出来的都很复杂……让我给你一个快速的代码示例我的意思: Models:public class ComplexObject{ public string title { g
你好,在互联网上,我有一个有趣的难题:

是否可以绑定视图以创建对象,如果该对象包含纯粹使用MVC视图/部分视图的其他对象的列表?

男人,出来的都很复杂……让我给你一个快速的代码示例我的意思:

Models:
public class ComplexObject
{
    public string title { get; set; }
    public List<ContainedObject> contents { get; set; }
}

public class ContainedObject
{
    public string name { get; set; }
    public string data { get; set; }
}

好又简单吧?好的,所以用于创建其中一个的强类型视图对于“title”属性来说非常简单:

something like:
@Html.TextBoxFor(x => x.title)

但我无法找到一种使用MVC绑定“ContainedObjects”列表的好方法.我得到的最接近的是使用“List”脚手架模板创建一个强类型的IEnumerable局部视图,并将其包含在页面上.

在不添加样式等的情况下,该局部视图的默认外观为:

@model IEnumerable<MVCComplexObjects.Models.ContainedObject>

<p>
@Html.ActionLink("Create New","Create")
</p>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.data)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.data)
        </td>
        <td>
            @Html.ActionLink("Edit","Edit",new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details","Details",new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete","Delete",new { /* id=item.PrimaryKey */ })
        </td>
    </tr> 
}

</table>

但坦率地说,我无法弄清楚如何将其包含在创建新的ComplexObject中.换句话说,我可以通过绑定显示已存在的ContainedObjects列表,如下所示:
????@ Html.Partial(“PartialCreate”,Model.contents)

但我想我想要的是:

@Html.PartialFor("PartialCreate",x => x.contents)

我应该注意到,使用Javascript编写代码并没有太多麻烦(我将在下面包含代码),但我真的想知道是否有一种纯粹使用MVC的方法.我是最近从WebForms转换的(我几乎只是用AJAX调用替换了所有的回发),这种事情在我工作的项目中出现了很多.

无论如何,这是我目前的做法:

Html –

Name: <input type="text" id="enterName" />
Data: <input type="text" id="enterData" />
<a id="addItem">Add Item</a>

<ul id="addedItems">
</ul>

<a id="saveAll">Save Complex Object</a>

Javascript –

<script>
var contents = [];
$(document).ready(function () {

    $('#addItem').click(function () {
        var newItem = { name: $('#enterName').val(),data: $('#enterData').val() };
        contents.push(newItem);
        $('#addedItems').html('');
        for (var i = 0; i < contents.length; i++) {
            $('#addedItems').append(
                "<li>" + contents[i].name + "," + contents[i].data + "</li>"
            );
        }
    });

    $('#saveAll').click(function () {

        var toPost = { title: "someTitle",contents: contents };

        $.ajax({
                url: '/Home/SaveNew',type: 'POST',data: JSON.stringify(toPost),dataType: 'json',contentType: 'application/json; charset=utf-8',success: function (data,textStatus,jqXHR) {
                    alert("win");
                },error: function (objAJAXRequest,strError) {
                    alert("fail");
                }
            });
    });

});
</script>

这不是一个糟糕的解决方案或任何东西,我只是不想每次我想保存一个新对象时都要实现Javascript调用,但在其他地方使用标准的Razr代码.我希望全面合理地保持一致.

有没有其他人遇到这个问题并找到了解决方案?

解决方法

我最近发现自己需要完成相同的任务,就像你一样,不想添加一堆javascript.我正在使用MVC4,并且我可以说,似乎没有一种开箱即用的方法将模型的可枚举属性绑定到视图.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读