2015-04-03 88 views
0

我有以下代碼正在從.CSHTML文件中進行Ajax調用。Ajax調用參數不接受@Model作爲參數值

<script type="text/javascript"> 
    $("#Save").click(function() { 
     var model = { 
      EmployeeId: @Model.EmployeeId, 
      OverrideTermDate: $('#OverrideTermDate').val(), 
      OverrideHireDate: $('#OverrideHireDate').val(), 
     }; 
     $.ajax({ 
      data: @Model.EmployeeId, 
      url: "/Employee/UpdateOverrideDates", 
      type: "POST", 
      success: function (result) { 
       $(function() { 
        $("#dialog").dialog(); 
       }); 
      } 
     }); 
    }); 
</script> 

我的VS顯示語法錯誤。但代替@Model.EmployeeId,如果我將它硬編碼爲任何像1那樣的int值,那麼它工作正常。

現在@Model.EmployeeId不是NULL,它是一個int。只是Ajax不喜歡它。任何想法爲什麼?我應該在Ajax調用中不使用@Razor組件嗎?

+0

你不應該使用剃刀組件JS,而不是你可以做一個隱藏字段在剃刀和jQuery代碼使用它 – 2015-04-03 03:49:46

+1

嘗試使用'數據:「@ Model.EmployeeId」 '但這個腳本需要在你的視圖中,而不是JS文件。 – 2015-04-03 04:07:02

回答

1

要在JS使用剃刀,包裹中的屬性''

data : '@Model.EmployeeId', 

//For passing integer use parseInt('@Model.EmployeeId') or Number('@Model.EmployeeId') 

var model = { 
     EmployeeId: '@Model.EmployeeId', 
     .... 
}; 

引號作爲分隔符,所以剃刀解析器識別值。

或另外,

data : @Model.EmployeeId + "", 
1

這只是Visual Studio中的一個錯誤,視圖應該像例外一樣工作。 答案在這裏解釋:Razor/JavaScript and trailing semicolon

如果你不喜歡它,你可以把「零加」後@Model

$("#Save").click(function() { 
    var model = { 
     EmployeeId: @Model.EmployeeId + 0, 
     OverrideTermDate: $('#OverrideTermDate').val(), 
     OverrideHireDate: $('#OverrideHireDate').val(), 
    }; 
    $.ajax({ 
     data: @Model.EmployeeId + 0, 
     url: "/Employee/UpdateOverrideDates", 
     type: "POST", 
     success: function (result) { 
      $(function() { 
       $("#dialog").dialog(); 
      }); 
     } 
    }); 
});