我正在創建一個MVC網站,該網站使用彈出窗口上的部分視圖來處理所有我的CRUD事務。請注意,我的應用程序已經可以完美地處理這些CRUD操作(LINQ-To-Entity)。但是,我的彈出窗體有問題。添加窗體(CRUD)上的ASP.NET MVC Popup部分視圖問題
下面是我_Add.cshtml
代碼:
@model MyStore.Models.MyModels.ProductsModel
@{
Layout = null;
}
@using (Ajax.BeginForm("_Add", "Products", new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
OnSuccess = "addSuccess"
}, new { @id = "addForm" }))
{
@Html.ValidationSummary(true)
<div id="add-message" class="error invisible"></div>
<fieldset>
<legend>Products</legend>
@Html.HiddenFor(m => Model.ProductCode)
<div class="editor-label">
@Html.LabelFor(model => model.ProductName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ProductName)
@Html.ValidationMessageFor(model => model.ProductName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Price)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
</div>
</fieldset>
}
下面是我Controller
代碼:
[HttpGet]
public ActionResult _Add(string productCode)
{
ProductsModel model = newProductsModel();
model.ProductCode = ProductCode ;
return PartialView(model);
}
[HttpPost]
public JsonResult _Add(ProductsModel model)
{
if (ModelState.IsValid)
{
ProductsManager prod = new ProductsManager();
Products pa = new Products();
pa.ProductCode = model.ProductCode;
pa.ProductName = model.ProductName;
pa.Price = model.Price;
prod.AddProduct(pa);
return Json(HelperClass.SuccessResponse(pa), JsonRequestBehavior.AllowGet);
}
else
{
return Json(HelperClass.ErrorResponse("Please review your form"), JsonRequestBehavior.DenyGet);
}
}
請注意:_Add.cshtml
是正在通過彈出渲染的局部視圖.js,我在互聯網上找到。它是通過此代碼呈現的:
@Html.ActionLink("[Add Product]", "_Add", new { ProductCode = @ViewData["ProductCode"] }, new { @class = "editLink" })
此作品沒關係。我的意思是它將產品添加到我的數據庫。但我的問題是,在點擊按鈕Proceed
,我從頁面得到這個彈出下載對話框:
有人可以請幫助我?我有一個預感,這是因爲我使用(POST,PUT,GET,DELETE)的HttpMethod
,但是我不確定哪一個是正確的,或者如果它確實是第一個問題。
任何幫助將不勝感激! PS。 對不起,很長的文章。
編輯:
編輯:
下面是我使用JScript代碼。這跟我跟着的教程基本一樣。我只是在最後一種方法上註釋了幾行。
此外,我正在使用MVC 4.希望這有助於!謝謝!
var linkObj;
$(function() {
$(".addLink").button();
$('#addDialog').dialog({
autoOpen: false,
width: 400,
resizable: false,
modal: true,
buttons: {
"Update": function() {
$("#add-message").html(''); //make sure there is nothing on the message before we continue
$("#addForm").submit();
},
"Cancel": function() {
$(this).dialog("close");
}
}
});
$(".addLink").click(function() {
//change the title of the dialog
linkObj = $(this);
var dialogDiv = $('#addDialog');
var viewUrl = linkObj.attr('href');
$.get(viewUrl, function (data) {
dialogDiv.html(data);
//validation
var $form = $("#addForm");
// Unbind existing validation
$form.unbind();
$form.data("validator", null);
// Check document for changes
//$.validator.unobtrusive.parse(document);
// Re add validation with changes
//$form.validate($form.data("unobtrusiveValidation").options);
//open dialog
dialogDiv.dialog('open');
});
return false;
});
});
function addSuccess(data) {
if (data.Success == true) {
//we update the table's info
//var parent = linkObj.closest("tr");
//parent.find(".carName").html(data.Object.Name);
//parent.find(".carDescription").html(data.Object.Description);
//now we can close the dialog
$('#addDialog').dialog('close');
//twitter type notification
$('#commonMessage').html("Add Complete");
$('#commonMessage').delay(400).slideDown(400).delay(3000).slideUp(400);
}
else {
$("#add-message").html(data.ErrorMessage);
$("#add-message").show();
}
}
我註釋掉這兩條線:
$.validator.unobtrusive.parse(document);
$form.validate($form.data("unobtrusiveValidation").options);
因爲不評論在運行時他們就會給我下面的錯誤:
這使我認爲這個問題是由於不顯眼的驗證。就像下面的Xnake發佈的鏈接一樣,我遇到了同樣的問題。唯一不同的是,線程開啓器必須禁用他的Web.config文件上的不顯眼的驗證來解決問題,而我不能這樣做,因爲我的代碼使用不顯眼的驗證。
任何幫助在這裏非常感謝。非常感謝你!
只是好奇,你能不能粘貼你的js代碼呢?另外,既然你沒有提到你正在使用哪個MVC版本,這可能有幫助嗎? http://stackoverflow.com/a/4892341/605907 – Xnake 2012-07-13 10:19:25
我試着在你給我的線程給出的解決方案(' '),但它似乎並不爲我工作。運行期間,我在我的javascript代碼中收到錯誤消息。感謝您的答覆! :) –
Smiley
2012-07-16 00:33:27