我正在處理我的第一個ASP.NET MVC 3應用程序,我想完成的是用戶可以從我的網格中選擇一個配方,然後將其顯示在div
稱爲細節。在那裏,用戶可以點擊編輯按鈕,視圖切換到同一個div
中的編輯視圖,然後當用戶進行更改時,可以單擊保存按鈕,這將保持更改並重新顯示詳細信息。通過jQuery POST傳遞的ViewModel包含null /空屬性
我使用的jqGrid(不是真的有密切關係的討論),並有一些代碼來填充細節DIV像這樣:
onSelectRow: function(theRow) {
var grid = jQuery('#recipeGrid');
var cellData = grid.jqGrid('getCell', theRow, 'RecipeID');
$('#details').load('@Url.Action("Details", "Recipe")', { id: cellData });
}
在這種細節查看有一個按鈕和一些jQuery的哪些呢類似的事情,換出這個細節與細節編輯觀點:
<input type="button" value="Edit" class='editrecipe' data-recipeid="@Model.RecipeID" />
<script type="text/javascript" language="javascript">
$(function() {
$('.editrecipe').click(function()){
var recipeId = $(this).data('reciepid');
$.ajax({
type: "GET",
data: "id=" + recipeId,
url: '@Url.Action("Edit", "Recipe")',
dataType: "html",
success: function (result) {
$('#details').html(result);
}
});
});
});
</script>
然後在該編輯看起來是這樣的:
@model IceCream.ViewModels.Recipe.RecipeCreateEditViewModel
@using (Html.BeginForm())
{
...
<input type="button" value="Save" class='saverecipe' />
}
<script type="text/javascript" language="javascript">
$(function() {
$('.saverecipe').click(function()){
$.ajax({
type: "POST",
data: $('form').serialize(),
cache: false,
url: '@Url.Action("Edit", "Recipe")',
dataType: "html",
success: function (result) {
$('#details').html(result);
}
});
});
});
</script>
回到我的控制器操作中,我注意到viewModel的一些屬性是正確的,但大多數都是null。我在猜測,我在這裏做了一些錯誤的事情,這裏涉及到序列化發生(或不)的ajax調用。有任何想法嗎?
更新:
於是,我改變了一些東西,它看起來更好。首先,我給我的形式的ID如下:
@using (Html.BeginForm("Edit", "Recipe", FormMethod.Post, new { id = "editRecipeForm" }))
然後,我改變了我的保存按鈕,看起來像這樣:
<input type="submit" value="Save" />
然後jQuery的是這樣的:
至少最初,它看起來像我的viewModel現在正在POST操作中正確填充。 但是它似乎不執行成功回調。我在我的控制器動作要做的就是調用
return Details(viewModel.RecipeID);
,我希望將返回PartialView背部和成功回調將取代與信息的「#details」 div的內容。實際發生的是它只是返回細節並顯示 - 不在div中。想法?
一個解決方案:
直到我走了進去,並創造了url: '@Url.Action("Edit", "Recipe")'
線不好的動作,我被愚弄自己,這是實際運行。原因?沒有包括jquery.form.js ...這將有助於事情。 :-p
我修改了一些東西。看起來現在這個樣子:
var options = {
target: "#details",
url: '@Url.Action("Edit", "Recipe")',
};
然後
$('#editrecipeform').submit(function() {
$(this).ajaxSubmit(options);
return false;
});
仍然會關心別人對這一思想 - 特別是如果有一個更好的方式來做到這一點。
爲您的ajax請求添加'傳統:真正'也許它會幫助...不確定 – Rafay