0

我在从我的视图中访问 ActionResult [Post] 时遇到问题。

看法:

@using (Html.BeginForm()){
<form id="edit-order-form" action="@Href("~/Orders/Edit")">///EDIT:
   ....

  <div class="row">
            <span class="label"><label for="ShipPostalCode">PostalCode:</label></span>
            <input type="text" id="txtShipPostalCode" name="ShipPostalCode" value="@ViewBag.ShipPostalCode" />
        </div>
        <div class="row">
            <span class="label">&nbsp;</span>
            <input type="submit" id="btnSave" name="submit" value="Save" />
        </div>
        </fieldset>
    </form>

<script type="text/javascript">

$("#btnSave").live("click", saveRecord);

function saveRecord() {

$.ajax(
 { type: "Post" ,
     url: '@Url.Action("Save", "OrdersList")',
     data: {
    OrderID: $("#hdnOrderID").val(),
    ShipName: $("#txtShipName").val(),
    ShipAddress: $("#ShipAddress").val(),
    RequiredDate: $("#RequiredDate").val(),
    ShipPostalCode: $("#ShipPostalCode").val(),
         },
         dataType: "html" ,
         success: function  (data){
             alert ('saved');
              }
     }).....

控制器:

        [HttpPost]
    //[ValidateAntiForgeryToken]
    public ActionResult Save(int orderId = 0, string ShipName = "", string ShipAddress = "", string ShipPostalCode = "", DateTime? RequiredDate = null)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);

        using (SqlCommand cmd = new SqlCommand("GetOrders", conn))
        {
            conn.Open();
            //SqlCommand cmd = new SqlCommand( "GetOrders", "connection string");

            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@ID", orderId);
            cmd.Parameters.AddWithValue("@ShipName", ShipName);
            cmd.Parameters.AddWithValue("@ShipAddress", ShipAddress);
            SqlParameter paramDate = cmd.Parameters.Add("@RequiredDate",
            System.Data.SqlDbType.DateTime);
            paramDate.Value = RequiredDate;
            //cmd.Parameters.AddWithValue("@RequiredDate", RequiredDate);
            cmd.Parameters.AddWithValue("@ShipPostalCode", ShipPostalCode);

            //SqlParameter Total = cmd.Parameters.Add("@Total", SqlDbType.Int);
            //Total.Direction = ParameterDirection.Output;
            cmd.ExecuteNonQuery();



            conn.Close();


            return View();
        }
    }

控制器动作不会被调用。可能javascript函数也没有。

4

2 回答 2

0

您是否尝试过使用document.forms[0].submit();?看看是帖子还是你的javascript有问题?

此外 .live 已被弃用,您应该改用 .on 。

示例代码:

$("#btnSave").on("click", saveRecord);

//or $("#btnSave").click( function(){
//    document.forms[0].submit();
//});

function saveRecord() {
    document.forms[0].submit();
 })

并将您的保存操作结果的属性更改为[HttpPost]以下[ActionName("Edit")]

于 2013-09-11T12:05:01.433 回答
0

首先,您需要做的是将“btnSave”输入元素的“类型”属性更改为“按钮”,以便在单击时不会发布页面。具有“提交”类型的“输入”元素实际上会发布页面,当您想要在单击按钮时执行 javascript 时,这不是您想要的。

接下来你需要做的是使用 IE 或 Chrome 并打开开发工具,“F12”。在 Chrome 中,单击“源”选项卡,然后通过单击“元素”选项卡下方的“框箭头”打开“导航器”。找到包含您的 javascript 的文件并在具有以下语法的行处断点,$.ajax(. 然后转到您的页面并单击“提交”按钮。从那里,您应该看到最有可能导致您的 javascript 失败的异常。

此外,您可能想打开“Fiddler”并观察是否启动了 RESTful 服务的“发布”。

于 2013-09-11T12:08:08.353 回答