Jquery 数据未进入控制器方法-MVC

Jquery 数据未进入控制器方法-MVC,jquery,ajax,asp.net-mvc,asp.net-mvc-4,model-view-controller,Jquery,Ajax,Asp.net Mvc,Asp.net Mvc 4,Model View Controller,我是MVC新手,我尝试编辑一行并通过jQuery和AJAX将编辑的数据发送到控制器方法,当我单击编辑时,特定行变成文本框,并显示saveActionLink,而不是edit,但当我保存它时,它会给我一个异常 以下是我的jQuery/AJAX: @model IEnumerable<OTESSystem.Models.tbl_HolidayList> @{ ViewBag.Title = "Index"; } <script src="~/Scripts/jquer

我是MVC新手,我尝试编辑一行并通过jQuery和AJAX将编辑的数据发送到控制器方法,当我单击编辑时,特定行变成文本框,并显示
save
ActionLink
,而不是
edit
,但当我保存它时,它会给我一个异常

以下是我的jQuery/AJAX:

@model IEnumerable<OTESSystem.Models.tbl_HolidayList>

@{
    ViewBag.Title = "Index";
}


<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery-ui-1.8.24.min.js"></script>
<link href="~/Content/themes/base/jquery-ui.css" rel="stylesheet" />
    <script type="text/javascript">
        $(document).ready(function () {
            function toggleEditability() {
                $(this).closest('tr')
                       .find('a.Edit, a.Save, .displayText, input[type=text]')
                       .toggle(); 
            }

            $('a.Edit').click(toggleEditability);

            $('a.Save').click(function () {
                toggleEditability.call(this);
                var data = $(this).closest('form').serialize();
                //var url = $(this).attr('href');
                var actionURL = '@Url.Action("Edit", "Holiday")';
                $.ajax({
                    url: actionURL,             // Url to send request to
                    data:data,           // Send the data to the server
                    type: "POST",         // Make it a POST request
                    dataType: "html",     // Expect back HTML
                    success: function (html) {
                        $("#dialog-edit").dialog('open');       //
                    }
                });
            });
        });
    </script>
tbl_HolidayList.cs

namespace OTESSystem.Models
{
    using System;
    using System.Collections.Generic;

    public partial class tbl_HolidayList
    {
        public int Holiday_Id { get; set; }
        public string Holiday_Name { get; set; }
        public string Holiday_Description { get; set; }
        public Nullable<System.DateTime> Holiday_date { get; set; }
    }
}
namespace-OTESSystem.Models
{
使用制度;
使用System.Collections.Generic;
公共部分类tbl_度假清单
{
公共假日Id{get;set;}
公共字符串名称{get;set;}
公共字符串假日描述{get;set;}
可为空的公共假日日期{get;set;}
}
}

你能告诉我为什么我会得到这个例外吗

您以前问过类似的问题,主要问题与以前的问题相同。您不能将
foreach
循环与
@Html.TextBoxFor
等一起使用。您需要使用for循环并对表达式建立索引:

问题1:

e、 g

其他问题

您的页面当前包含一个
IEnumerable
项集合。 您通常会使用
for
循环来渲染这些对象(不是每个对象-请参见问题1)。然后,您将回发整个页面,以便您的
edit
方法也应使用
IEnumerable

e、 g

公共行动结果编辑(IEnumerable tbl_holidaylist)
{
foreach(tbl_度假列表中的var假日)
{
//保存更改
}
}
基本上,你的页面上有两个相互冲突的东西。你需要决定是支持还是反对标准的MVC实践:)

这对我很有效

<script type="text/javascript">
        $(document).ready(function () {
            function toggleEditability() {
                $(this).closest('tr')
                       .find('a.Edit, a.Save, .displayText, input[type=text]')
                       .toggle();

            }

            $('a.Edit').click(toggleEditability);

            $('a.Save').click(function () {;


                //alert("hello");
                var tr = $(this).parents('tr:first');
                //alert(tr);
                var hid = tr.find("#hdnid").val();
                var HName = tr.find("#txtname").val();
                var Hdesc = tr.find("#txtdesc").val();
                var date = tr.find("#txtdate").val();
                tr.find("#hdnid").text(hid);
                tr.find("#txtname").text(HName);
                tr.find("#txtdesc").text(Hdesc);
                tr.find("#txtdate").text(date);
                toggleEditability.call(this);
                //tr.find('.edit-mode, .display-mode').toggle();
                //alert(hid);
                //alert(HName);
                //alert(Hdesc);
                //alert(date);
                var dataToSend = {
                    Holiday_Id: hid,
                    Holiday_Name: HName,
                    Holiday_Description : Hdesc,
                    Holiday_date: date
                }
                var url = '@Url.Action("Edit", "Holiday")';
                //alert("b4 ajax");
                $.ajax({
                    url: '@Url.Action("Edit", "Holiday")',
                    type: "Post",
                    data: dataToSend,
                    //dataType: "html",
                    success: function (data) { 
                        alert("saved");
                    },
                    error: function () {
                        alert("error");
                    }
                });
            });
        });
    </script>

$(文档).ready(函数(){
函数切换可编辑性(){
$(this).最近('tr'))
.find('a.Edit,a.Save,.displayText,input[type=text]')
.toggle();
}
$('a.Edit')。单击(可切换编辑性);
$('a.Save')。单击(函数(){;
//警惕(“你好”);
var tr=$(this.parents('tr:first');
//警报(tr);
var hid=tr.find(#hdnid”).val();
var HName=tr.find(“#txtname”).val();
var Hdesc=tr.find(#txtdesc”).val();
var date=tr.find(“#txtdate”).val();
tr.find(“hdnid”).text(隐藏);
tr.find(“#txtname”).text(HName);
tr.find(“txtdesc”).text(Hdesc);
tr.find(“#txtdate”).text(日期);
切换可编辑性。调用(此);
//tr.find('.edit mode,.display mode').toggle();
//警报(hid);
//警惕(HName);
//警报(Hdesc);
//警报(日期);
var dataToSend={
假日Id:hid,
假日名称:HName,
假期描述:Hdesc,
假期日期:日期
}
var url='@url.Action(“编辑”、“假日”);
//警报(“b4 ajax”);
$.ajax({
网址:'@url.Action(“编辑”、“假日”),
类型:“Post”,
数据:dataToSend,
//数据类型:“html”,
成功:函数(数据){
警报(“已保存”);
},
错误:函数(){
警报(“错误”);
}
});
});
});

如何实例化上下文类?在
tbl\u HolidayList
类中有哪些属性,属性名称是否与序列化表单中的字段名称匹配?假设POST请求包含数据,问题在于C映射程序。我用
tbl\u HolidayList.cs
code更新了我的问题,属性名称与字段名称匹配。它给了我一个错误
表达式树my no包含一个动态操作
我不能用
foreach
循环吗?@Umm E Habiba Siddiqui:在MVC中使用
TextBoxFor
EditorFor
等重复输入绝对不能用
foreach
循环。很抱歉它们只会渲染出重复的命名元素,而不会正确发回。与
Model.count()
相同,您能告诉
var data=$(this.closest('form').serialize()吗此语句没有问题,因为我放置了
警报(数据)
,它没有显示任何内容。
namespace OTESSystem.Models
{
    using System;
    using System.Collections.Generic;

    public partial class tbl_HolidayList
    {
        public int Holiday_Id { get; set; }
        public string Holiday_Name { get; set; }
        public string Holiday_Description { get; set; }
        public Nullable<System.DateTime> Holiday_date { get; set; }
    }
}
@for (int i = 0; i < Model.Count(); i++)
{
     [snip]
     <td>
          @Html.TextBoxFor(m => Model[i].Holiday_Name, new { style = "display: none; width:170px; height:15px" })
          <div class="displaytext">
             @Html.DisplayFor(m => Model[i].Holiday_Name)
          </div>
     </td>
     [snip]
}
    var data = $(this).closest('tr').serialize();
 public ActionResult Edit(IEnumerable<tbl_HolidayList> tbl_holidaylist)
 {
      foreach( var holiday in tbl_holidaylist)
      {
          //save changes
      }
 }
<script type="text/javascript">
        $(document).ready(function () {
            function toggleEditability() {
                $(this).closest('tr')
                       .find('a.Edit, a.Save, .displayText, input[type=text]')
                       .toggle();

            }

            $('a.Edit').click(toggleEditability);

            $('a.Save').click(function () {;


                //alert("hello");
                var tr = $(this).parents('tr:first');
                //alert(tr);
                var hid = tr.find("#hdnid").val();
                var HName = tr.find("#txtname").val();
                var Hdesc = tr.find("#txtdesc").val();
                var date = tr.find("#txtdate").val();
                tr.find("#hdnid").text(hid);
                tr.find("#txtname").text(HName);
                tr.find("#txtdesc").text(Hdesc);
                tr.find("#txtdate").text(date);
                toggleEditability.call(this);
                //tr.find('.edit-mode, .display-mode').toggle();
                //alert(hid);
                //alert(HName);
                //alert(Hdesc);
                //alert(date);
                var dataToSend = {
                    Holiday_Id: hid,
                    Holiday_Name: HName,
                    Holiday_Description : Hdesc,
                    Holiday_date: date
                }
                var url = '@Url.Action("Edit", "Holiday")';
                //alert("b4 ajax");
                $.ajax({
                    url: '@Url.Action("Edit", "Holiday")',
                    type: "Post",
                    data: dataToSend,
                    //dataType: "html",
                    success: function (data) { 
                        alert("saved");
                    },
                    error: function () {
                        alert("error");
                    }
                });
            });
        });
    </script>