0

大家好,我有ajax,我有一些数据和一个控制器操作方法......我需要将数据发送到控制器操作方法......当我这样做时,它在我的控制器方法中有空值,任何人都可以纠正我在哪里做...

       <script type="text/javascript">
    $(document).ready(function () {

        $("#butValidateForm").click(function () {               
            UpdateMethod();
        })
    });
    function UpdateMethod() {
        var s = document.getElementById("EmployeeID");
        var selecteditem1 = s.options[s.selectedIndex].value;

        var a = document.getElementById("FromStatusId");
        var selecteditem6 = a.options[a.selectedIndex].value;

        var data = '{"AssignTo":"' + selecteditem1 + '","Status":"' + selecteditem6 + '"}';
        alert(data);

        $.ajax({
            type: "POST",
            url: "/ViewBug/Update/",
            enctype: 'multipart/form-data',
            data: data,
            success: function () {
            }
        });
    }  

</script>

我的控制器操作方法

          [HttpPost]
    public ActionResult Update(BugModel model, FormCollection form, string selecteditem1, string selecteditem6)
    {
        if (Session["CaptureData"] == null)
        {
        }
        else
        {
            model = (BugModel)Session["CaptureData"];
        }
        ViewBag.AssignTo = new SelectList(GetEmployee(), "EmployeeID", "EmployeeName");
        ViewBag.Status = new SelectList(GetFromStatus(), "FromStatusId", "FromStatus");
        using (SqlConnection conn = new SqlConnection(connString))
        {
            SqlCommand cmd = new SqlCommand("sp_history", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            conn.Open();
            cmd.Parameters.Add("@Title", SqlDbType.VarChar).Value = model.Title;
            cmd.Parameters.Add("@FixedById", SqlDbType.VarChar).Value = model.LoginName;
            cmd.Parameters.Add("@AssignedId", SqlDbType.Int).Value = model.AssignTo;
            cmd.Parameters.Add("@Resolution", SqlDbType.VarChar).Value = model.Resolution;
            cmd.Parameters.Add("@FromStatus", SqlDbType.VarChar).Value =model.Status;
            string fileName = string.Empty;
            string StrFilePath = string.Empty;
            foreach (BugAttachment objList in model.ListFile)
            {
                if (string.IsNullOrEmpty(StrFilePath))
                {
                    fileName = objList.AttachmentName;
                    StrFilePath = objList.AttachmentUrl;
                }
                else
                {
                    fileName = fileName + "," + objList.AttachmentName;
                    StrFilePath = StrFilePath + "," + objList.AttachmentUrl;
                }
            }
            cmd.Parameters.Add("@AttachmentName", SqlDbType.VarChar).Value = fileName;
            cmd.Parameters.Add("@BugAttachmentUrl", SqlDbType.VarChar).Value = StrFilePath;
            cmd.Parameters.Add("@AttachedBy", SqlDbType.VarChar).Value = model.LoginName;
            cmd.ExecuteNonQuery();
            conn.Close();
        }
        return View("Edit");
    } 
4

3 回答 3

4

代替

public ActionResult Update(BugModel model, FormCollection form, string selecteditem1, string selecteditem6)

试试这个:

public ActionResult Update(BugModel model, FormCollection form, string AssignTo, string Status)

您需要使用您在发送回的对象中使用的属性名称,因为您已将它们命名为 AssignTo 和 Status。希望这可以帮助。

编辑:

尝试像这样发送对象:

var data ={};
data.AssignTo = selectedvalue1;
data.Status = selectedvalue6;

看看这是否有什么不同。如果您仍然有问题,您可以在萤火虫/开发人员工具中检查请求吗?

于 2012-08-20T09:53:15.507 回答
4

试试这个:

var data = { AssignTo: selecteditem1, Status: selecteditem6 };

另外,根据亨利的回答,使用签名:

public ActionResult Update(BugModel model, 
              FormCollection form, 
              string AssignTo, 
              string Status)

tho,您当然应该能够从form[]集合中获取所需的值,因为您正在HttpPost幕后进行操作:

(即var assignTo = form["AssignTo"];等)。

[编辑] - 出于好奇,我能问一下你为什么将 jquery 语法与更传统的 javascript 对象语法混合和匹配。一个例子是你从哪里获得EmployeeID期权的价值??为什么不直接使用var selecteditem1 = $('#EmployeeID').val();.

我还注意到 ViewBag 对象在您的HttpPost操作中得到更新。您是否希望能够在返回视图时使用它 - 肯定不是(无论如何都不是 ajax 请求)。对我的好奇心的快速解释会很棒。在我看来,你试图用这个动作做太多(当然,保持干燥 - 但是)我担心你最终会陷入困境,因为你似乎正在建立许多不同的入口点向上。我建议温和地倒带,只是为了让事情更加集中,每个动作都有一个单一的责任。

于 2012-08-20T10:49:58.633 回答
0

我最终做了以下事情:

      <script type="text/javascript">
    $(document).ready(function () {

        $("#butValidateForm").click(function () {               
            UpdateMethod();
        })
    });
    function UpdateMethod() {
        var s = document.getElementById("EmployeeID");
        var selecteditem1 = s.options[s.selectedIndex].value;

        var a = document.getElementById("FromStatusId");
        var selecteditem6 = a.options[a.selectedIndex].value;

       // var data = '{AssignTo:' + selecteditem1 + '}';
       // alert(data);
        var AssignTo;
        var Title;
        Title=$("#Title").val();
        var FixedBy;
        FixedBy = $("#LoginName").val();
        var Resolution;
        Resolution = $("#Resolution").val();
        var Status;
        Status = $("#FromStatusId").val();
        $.ajax({
            type: "POST",
            url: "/ViewBug/Update/",
            enctype: 'multipart/form-data',
            data: {AssignTo:selecteditem1,Title:Title,FixedBy:FixedBy,Resolution:Resolution,Status:Status},
            success: function () {
            }
        });
    }



</script>
于 2012-08-20T12:48:33.040 回答