首次提交Ajax Form作品,但第二次提交不做任何事
我想通过ajax添加和删除国家对象的本地化名称。因此我已经构建了两个部分视图。第一个包含country-object的generel edit funcionality,第二个partial视图(将在第一个视图内呈现)包含添加/删除本地化名称的逻辑。首次提交Ajax Form作品,但第二次提交不做任何事
第一局部视图:
@model CountryViewModel // scripts here
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
[...] // the fields of the object to edit...
</fieldset>
}
// this tag will be updated by the partial view
<div id="localizedNamesOverview">
@Html.Partial("LocalizedNamesOverview",
Model.LocalizedNames,
new ViewDataDictionary
{
{ "countryId", Model.CountryId }
})
</div>
第二部分视图:
@model IEnumerable<LocalizedNameViewModel> <table>
@foreach (var item in Model)
{
<tr>
<td> @item.Language </td>
<td> @item.Name </td>
<td>
@Ajax.ActionLink("Delete",
"DeleteLocalizedName",
"Country",
new { countryId = this.ViewData[ "countryId" ],
localizedNameId = item.CountryI18nId },
new AjaxOptions
{
UpdateTargetId="localizedNamesOverview",
InsertionMode=InsertionMode.Replace,
HttpMethod="POST"
})
</td>
</tr>
}
@using(Ajax.BeginForm("AddLocalizedName",
"Country",
new { countryId = this.ViewData[ "countryId" ] },
new AjaxOptions
{
UpdateTargetId = "localizedNamesOverview",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST"
}))
{
<tr>
<td> <input class="text-box single-line" id="LanguageId" name="LanguageId" value="" type="text" /> </td>
<td> <input class="text-box single-line" id="Name" name="Name" value="" type="text" /> </td>
<td> <input type="submit" value="Add new localized name" /> </td>
</tr>
}
</table>
专用控制器返回时本地化名称要么添加或移除的第二局部视图,并通过添加内容替换其本身从第一个视图进入'localizedNamesOverview'。到目前为止,这工作正如我所料。
现在的问题是这种行为只有一次。如果我已成功添加或删除名称,则无法删除/添加第二个名称。目前我看不到问题出在哪里,因为生成的html看起来等于第一次提交之后。
任何帮助表示赞赏。
由于
回答:
好,我想出了什么问题:
当第一请求是由与所述第二部分视图重新渲染它从其中需要与母体失去ViewData的信息(countryId
)生成工作链接(每个现有本地化名称的删除链接)。
同样的问题适用于也会丢失id的sourrounding ajax-form。通过重新定位代码,我可以解决这个问题。我将@using(Ajax.BeginForm...
代码从第二部分视图放到父视图中,以便在ajax请求之后不会重新生成代码。
1日局部视图(更新):
@using(Ajax.BeginForm("AddLocalizedName", "Country",
new { countryId = this.ViewData[ "countryId" ] },
new AjaxOptions
{
UpdateTargetId = "localizedNamesOverview",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST"
}))
{
// this tag will be updated by the partial view
<div id="localizedNamesOverview">
@Html.Partial("LocalizedNamesOverview",
Model.LocalizedNames,
new ViewDataDictionary
{
{ "countryId", Model.CountryId }
})
</div>
}
的删除链接问题可以解决,因为我的模型LocalizedNameViewModel
还包含专用countryId
,所以我把它从那里。
第二局部视图(更新):
@Ajax.ActionLink("Delete", "DeleteLocalizedName",
"Country",
new { countryId = item.CountryId, // took countryId from the model
localizedNameId = item.CountryI18nId },
new AjaxOptions
{
UpdateTargetId="localizedNamesOverview",
InsertionMode=InsertionMode.Replace,
HttpMethod="POST"
})
以上是 首次提交Ajax Form作品,但第二次提交不做任何事 的全部内容, 来源链接: utcz.com/qa/264867.html