Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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# MVC模型绑定对象列表_C#_Ajax_Asp.net Mvc_Jquery - Fatal编程技术网

C# MVC模型绑定对象列表

C# MVC模型绑定对象列表,c#,ajax,asp.net-mvc,jquery,C#,Ajax,Asp.net Mvc,Jquery,绑定包含对象列表的模型时遇到问题。当我尝试将数据从控制器传递到视图时没有问题,但是当我想要将数据发送回视图时,我会收到一条消息,表明该方法不存在 我使用了一个ajax调用,并将$form.serialize()作为数据放入其中,可以在fiddler中看到包含所有数据的列表,但绑定方面我运气不佳 模型是: public class Single { public int Id {get;set;} public string Name {get;set;} public List

绑定包含对象列表的模型时遇到问题。当我尝试将数据从控制器传递到视图时没有问题,但是当我想要将数据发送回视图时,我会收到一条消息,表明该方法不存在

我使用了一个ajax调用,并将$form.serialize()作为数据放入其中,可以在fiddler中看到包含所有数据的列表,但绑定方面我运气不佳

模型是:

public class Single
{
   public int Id {get;set;}
   public string Name {get;set;}
   public List<SimpleDropdown> dddl {get;set;}
   public int SelectedEmp {get;set;}
}
public class MainModel
{
   public List<Single> main_model_list {get;set;}
}
这个方法不会被调用,但是当我删除参数时,调用就起作用了。所以我肯定绑定不起作用。我有一个更复杂的模型,但我尽可能地简化了它,但仍然无法让它工作

所以我的问题是,我怎样才能测试它,看看问题出在哪里

编辑:

我现在还没有代码,但是代码是功能性的,因为我在项目的其他地方使用它。是这样的:

$("#form").submit(function( ) {
      $.ajax({
        url: "/Controller/SaveModel",
        type: "POST",
        data: $(this).serialize()
    });
});
@using (Html.BeginForm("SaveModel", "Home", FormMethod.Post, new { id = "form" })) 
{
    @for (var z = 0; z < ViewBag.groupes.Length; z++)
    {
        <div style="border-left: 1px solid black">
            <h1>@ViewBag.groupes[z]</h1>
        </div>
    }
    @for (var i = 0; i < Model.main_model_list.Count; i++)
    {
        <div>@Html.LabelFor(x => x.main_model_list[i].Id)</div>
        <div>@Html.LabelFor(x => x.main_model_list[i].Name)</div>
        <div style="float: left">@Html.DropDownListFor(x => main_model_list[i].SelectedEmp, new SelectList(main_model_list[i].dddl, "Id", "Value", main_model_list[i].SelectedEmp), new { @class = "preferences_dd_lists" })</div>
    }
}
该表单如下所示:

$("#form").submit(function( ) {
      $.ajax({
        url: "/Controller/SaveModel",
        type: "POST",
        data: $(this).serialize()
    });
});
@using (Html.BeginForm("SaveModel", "Home", FormMethod.Post, new { id = "form" })) 
{
    @for (var z = 0; z < ViewBag.groupes.Length; z++)
    {
        <div style="border-left: 1px solid black">
            <h1>@ViewBag.groupes[z]</h1>
        </div>
    }
    @for (var i = 0; i < Model.main_model_list.Count; i++)
    {
        <div>@Html.LabelFor(x => x.main_model_list[i].Id)</div>
        <div>@Html.LabelFor(x => x.main_model_list[i].Name)</div>
        <div style="float: left">@Html.DropDownListFor(x => main_model_list[i].SelectedEmp, new SelectList(main_model_list[i].dddl, "Id", "Value", main_model_list[i].SelectedEmp), new { @class = "preferences_dd_lists" })</div>
    }
}
@使用(Html.BeginForm(“SaveModel”、“Home”、FormMethod.Post、new{id=“form”}))
{
@对于(var z=0;zx.main\u model\u list[i].Id)
@LabelFor(x=>x.main\u model\u list[i].Name)
@Html.DropDownListFor(x=>main_model_list[i]。SelectedEmp,new SelectList(main_model_list[i]。dddl,“Id”,“Value”,main_model_list[i]。SelectedEmp),new{@class=“preferences_dd_list”})
}
}
尝试以下操作:

$("#form").submit(function( ) {
      $.ajax({
        url: "/Controller/SaveModel",
        contentType: "application/json",
        type: "POST",
        data: $(this).serialize()
    });
});

绑定时,绑定器正在查找您未提供的值Id。 因此,在视图页面的循环中添加此项

@Html.HiddenFor(x => x.main_model_list[i].Id)

我确信您编写的html是错误的,您想向controller发布一个集合,但您的数据表单与您的模型不匹配

我认为如果你想把一个集合发送给你的控制器,你必须修改你的html表单 就像这样:

<input type="hidden" name="main_model_list[0].Id" value="1 />
<input type="hidden" name="main_model_list[0].Name" value="xyz" />
<select name="main_model_list[0].SelectedEmp">
.....
</select> 
<input type="hidden" name="main_model_list[1].Id" value="1 />
<input type="hidden" name="main_model_list[1].Name" value="xyz" />
<select name="main_model_list[1].SelectedEmp>
.....
</select> 

我已经执行了下面的代码,它工作得很好。声明模型如下

{

for(var i=0;iModel.main_Model_list[i].Id)
@Html.TextBoxFor(x=>Model.main\u Model\u list[i].Name)
@Html.TextBoxFor(x=>Model.main\u Model\u list[i]。SelectedEmp)
@Html.DropDownListFor(x=>Model.main_Model_list[i].SelectedEmp,new SelectList(Model.main_Model_list[i].dddl,“Text”,“Value”,Model.main_Model_list[i].SelectedEmp),new{@class=“preferences_dd_list”})
}
}

@节脚本{
$(文档).ready(函数(){
$('#btnsave')。单击(函数(){
$.ajax({
async:false,
cache:false,
数据:$('#formModel')。序列化(),
url:'@url.Action(“SaveModel”,“Basic”),
类型:“POST”,
数据类型:“text/html”,
成功:函数(){
警惕(“成功”);
},
错误:函数(错误抛出){
调试器;
警惕(‘出了问题!!!’);
}
});
});
});
}

首先,确保所有脚本文件都已加载,并且


你可以尝试使用

  @using(Ajax.BeginForm("SaveModel", "controller", formMethod.Post, new AjaxOptions{ }))
  {
      // your form
  }
别忘了使用jquery.unobtrusive-ajax.js


使用Ajax.BeginForm,您可以删除jQuery代码块以发送表单,并使表单在操作中直接绑定。

您可以更改代码

data:{ model:$(this).serialize()}

因为没有给出参数名,mvc模型绑定无法工作。

那么ajax调用在哪里?如何输出视图?您是否碰巧使用了一个
foreach
?我正在使用for语句传递主模型列表中的所有元素及其属性。@Aleks您能显示表单的html(查看源代码)吗?@Aleks您检查过ajax调用期间生成的JSON吗?它是否具有MainModel的正确属性?我仍然有相同的问题。
for (var i = 0; i < Model.main_model_list.Count; i++)
{
<div>@Html.TextBoxFor(x => Model.main_model_list[i].Id)</div>
<div>@Html.TextBoxFor(x => Model.main_model_list[i].Name)</div>
<div>
    @Html.TextBoxFor(x => Model.main_model_list[i].SelectedEmp)
</div>
<div style="float: left">
    @Html.DropDownListFor(x => Model.main_model_list[i].SelectedEmp, new SelectList(Model.main_model_list[i].dddl, "Text", "Value", Model.main_model_list[i].SelectedEmp), new { @class = "preferences_dd_lists" })

</div>

}

<input type="button" value="Save" id="btnsave" name="btnsave" />
@section Scripts{
<script type="text/javascript">
    $(document).ready(function () {
        $('#btnsave').click(function () {
            $.ajax({
                async: false,
                cache: false,
                data: $('#formModel').serialize(),
                url: '@Url.Action("SaveModel", "Basic")',
                type: "POST",
                dataType: "text/html",
                success: function () {
                    alert('success');
                },
                error: function (errorThrown) {
                    debugger;
                    alert('something went wrong!!!');
                }

            });
        });
    });
</script>
  @using(Ajax.BeginForm("SaveModel", "controller", formMethod.Post, new AjaxOptions{ }))
  {
      // your form
  }
data:{ model:$(this).serialize()}