Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模型中的可空列表_C#_Asp.net Mvc_Model - Fatal编程技术网

C# 模型中的可空列表

C# 模型中的可空列表,c#,asp.net-mvc,model,C#,Asp.net Mvc,Model,我在一个具有父子关系的模型中有一组多层对象。见下面的代码: public class TracksCollectionsPagesModel : List<TracksModel> { } public class TracksModel : List<CollectionModel> { public Guid? TrackID { get; set; } public string TrackName { get; set; }

我在一个具有父子关系的模型中有一组多层对象。见下面的代码:

    public class TracksCollectionsPagesModel : List<TracksModel>
{


}


public class TracksModel : List<CollectionModel>
{
    public Guid? TrackID { get; set; }
    public string TrackName { get; set; }
    public string TrackDescription { get; set; }
    //public List<CollectionModel> Collections { get; set; }


}

public class CollectionModel : List<PagesModel>
{
    public Guid? CollectionID { get; set; }
    public string CollectionName { get; set; }
    public string CollectionDescription { get; set; }
    //public List<PagesModel> Pages { get; set; }


}

public class PagesModel : List<ContentItemsModel>
{
    public Guid? PageID { get; set; }
    public string PageName { get; set; }
    public string PageDescription { get; set; }
    //public List<ContentItemsModel> ContentItems { get; set; }

}

public class ContentItemsModel 
{
    public Guid? ContentItemID { get; set; }
    public string ContentItemName { get; set; }
    public string ContentItemDescription { get; set; }

}
更新:应评论员请求添加了Javascript

        // modal for adding Tracks
    $('#AddNewTrack').click(function () {
        $('#AddNewTrackModal').dialog({
            autoOpen: true,
            position: { my: "center", at: "top+350", of: window },
            width: 500,
            resizable: false,
            title: 'Add Track Form',
            modal: true,
            open: function () {
                $(this).load('@Url.Action("AddTrack")');
            },
            buttons: {
                "Add Track": function () {
                    addTrackInfo();
                },
                Cancel: function () {
                    $(this).dialog("close");
                }
            }
        });

    });




    function addTrackInfo() {

        alert($("#AddTrackForm").serialize());
        $.ajax({
            url: '@Url.Action("AddTrack")',
            type: 'POST',
            data: $("#AddTrackForm").serialize(),
            success: function (data) {
                if (data.result) {
                    $(':input', '#AddTrackForm')
                        .not(':button, :submit, :reset, :hidden')
                        .val('')
                        .removeAttr('checked')
                        .removeAttr('selected');
                    alert(data.responseText);
                    $('#AddEntityModal').dialog("close");
                    window.location = "@Url.Action("Tracks")";
                } else {
                    alert(data.responseText);
                    $('#AddEntityModal').dialog("close");
                }

            }
        });
    }

请注意,我已尝试从.not中删除hidden,但它仍然为空。

如果您只是编辑TracksModel部分,那么您不需要担心视图中的任何集合,也就是说,您不需要创建表单字段,也不必担心将其发回

如果您要创建一个新的TracksModel,那么集合将为null,这一点非常好。如果您正在编辑一个现有的TracksModel,那么无论如何,您不应该直接保存回发,而是应该将已发布的数据映射回从数据库中重新提取的实体。例如:

var tracks = db.Tracks.Find(model.TrackId);
tracks.TrackName = model.TrackName;
tracks.TrackDescription = model.TrackDescription;
db.Entry(tracks).State = EntityState.Modified;
db.SaveChanges();

那么,无论集合是什么,都保持原样,没有任何更改。

为什么您的类继承自基类,然后才将该基类的实例作为属性?我将其注释掉了,因为某些原因,在我最初进行模型设计时,它对我来说很有意义。我只是在创建新的轨迹,但是,tracksmodel在控制器中显示为空,因此我无法将其添加到数据库中。您是否通过AJAX发布?如果是这样的话,那么就包括你的AJAX代码,因为这似乎就是你的问题所在。另外,几乎这个精确的代码正在另一个模态窗口上使用,并且工作正常,这就是为什么我认为我可能需要将我的所有模型分离为单独的模型,而不是像我现在这样与基类进行菊花链接。我只是想在重新设计模型之前进行最后一次碰撞,看看是否可以了解导致此问题的原因。
        // modal for adding Tracks
    $('#AddNewTrack').click(function () {
        $('#AddNewTrackModal').dialog({
            autoOpen: true,
            position: { my: "center", at: "top+350", of: window },
            width: 500,
            resizable: false,
            title: 'Add Track Form',
            modal: true,
            open: function () {
                $(this).load('@Url.Action("AddTrack")');
            },
            buttons: {
                "Add Track": function () {
                    addTrackInfo();
                },
                Cancel: function () {
                    $(this).dialog("close");
                }
            }
        });

    });




    function addTrackInfo() {

        alert($("#AddTrackForm").serialize());
        $.ajax({
            url: '@Url.Action("AddTrack")',
            type: 'POST',
            data: $("#AddTrackForm").serialize(),
            success: function (data) {
                if (data.result) {
                    $(':input', '#AddTrackForm')
                        .not(':button, :submit, :reset, :hidden')
                        .val('')
                        .removeAttr('checked')
                        .removeAttr('selected');
                    alert(data.responseText);
                    $('#AddEntityModal').dialog("close");
                    window.location = "@Url.Action("Tracks")";
                } else {
                    alert(data.responseText);
                    $('#AddEntityModal').dialog("close");
                }

            }
        });
    }
var tracks = db.Tracks.Find(model.TrackId);
tracks.TrackName = model.TrackName;
tracks.TrackDescription = model.TrackDescription;
db.Entry(tracks).State = EntityState.Modified;
db.SaveChanges();