Ok Je suis un débutant web, mais je dois admettre que je suis totalement accro maintenant. Voici mon problème:JQuery et Ajax.BeginForm() affichant les mêmes données deux fois
J'ai une page avec une grille MVCContrib et un lien "Ajouter des comptes" qui fait apparaître un formulaire Ajax enveloppé dans une boîte de dialogue JQuery. Quand je passe par le flux de travail la première fois tout fonctionne très bien. Je peux ajouter un nouvel élément et rafraîchir la grille via JQuery/Ajax (donc je pense). Toutefois, lorsque j'essaie d'ajouter le formulaire une deuxième fois, les données du premier formulaire sont toujours soumises. Je regarde le problème depuis trop longtemps et dois admettre que je suis totalement coincé. Btw - Je suis sûr que je fais tout à fait faux alors n'hésitez pas à suggérer quelque chose de mieux.
est ici la forme:
@using (Ajax.BeginForm("SaveCheckAccount", "UserManagement", null, new AjaxOptions { OnSuccess = "onAccountAdded", OnFailure = "onAccountAddedFailed"}, new { id = "accountDetails" }))
{
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.version)
@Html.HiddenFor(model => model.User_Id)
@Html.HiddenFor(model => model.IsDefault)
<table>
<tr>
<td>
Account Number
</td>
<td>
@Html.TextBoxFor(model => model.AccountNumber)
@Html.ValidationMessageFor(model => model.AccountNumber, "*")
</td>
</tr>
<tr>
<td>
Routing Number
</td>
<td>
@Html.TextBoxFor(model => model.RoutingNumber)
@Html.ValidationMessageFor(model => model.RoutingNumber, "*")
</td>
</tr>
<tr>
<td>
Account Type
</td>
<td>
@Html.DropDownListFor(model => model.AccountType_Id, new SelectList(@accountTypes, "ID", "Name", Model.AccountType_Id))
@Html.ValidationMessageFor(model => model.CheckAccountType)
@Html.ValidationMessageFor(model => model.AccountType_Id, "*")
</td>
</tr>
<tr>
<td>
Bank Name
</td>
<td>
@Html.TextBoxFor(model => model.BankName)
@Html.ValidationMessageFor(model => model.BankName, "*")
</td>
</tr>
<tr>
<td>
Account Name
</td>
<td>
@Html.TextBoxFor(model => model.AccountName)
@Html.ValidationMessageFor(model => model.AccountName, "*")
</td>
</tr>
</table>
}
<script type="text/javascript">
$.ajaxSetup({ cache: false });
</script>
Ce javascript réside dans bank.js fichier
function BindCommands(createUrl) {
$("#modalAdd").live("click", function (e) {
var dialogBox = $("<div>");
e.preventDefault();
$(dialogBox).dialog({
autoOpen: false,
resizable: false,
title: 'Create Account',
modal: true,
show: { effect: "blind", duration: 50 },
hide: { effect: "blind", duration: 50 },
open: function (event, ui) {
$.ajax(
{
type: "Get",
url: createUrl,
success: function (result) {
$(dialogBox).html(result);
}
});
},
buttons: {
Save: function() {
$("#accountDetails").submit();
$(this).dialog('close');
},
Cancel: function() {
$(this).dialog("close");
}
}
});
$(dialogBox).dialog('open');
});
}
function onAccountAdded(data, status, xhr) {
$("#accounts-grid").html(data);
};
function onAccountAddedFailed(data, status, xhr) {
alert("Failed");
};
Le pour est intially rendu en cliquant sur le lien ajouter sur ce point de vue:
<script type="text/javascript">
$.ajaxSetup({cache:false});
$(document).ready(function() {
var createUrl = '@Url.Action("NewBankAccountDetails", "UserManagement", new {[email protected]})';
BindCommands(createUrl);
});
</script>
@if (Model != null && Model.Id > 0)
{
<tr>
<td class="header" colspan="2">
User Accounts
</td>
</tr>
<tr>
<td>
<a href="#" id="modalAdd">Add Account</a>
</td>
</tr>
Html.RenderPartial("_BankAccountGrid", Model.CheckAccounts);
}
J'espérais sincèrement que c'était mon problème (comme dans le débogueur je peux voir deux de chaque fichier pour certains reaso) mais son pas. – Worthy7
Merci d'avoir sauvé ma journée! –
Cette réponse doit être marquée comme correcte. – AlphaTry