c# – Html.HiddenFor绑定到错误的元素

c# – Html.HiddenFor绑定到错误的元素,第1张

概述我有一个ASP.NET MVC应用程序,显示项目列表.在我的视图页面中,我遍历项目并使用局部视图渲染每个项目,如下所示: @foreach(var item in Model.items){ <li> @Html.Partial("ItemView", item) </li>} 在项目视图中,我使用具有“删除”按钮的表单来包装每个项目,如下所示: @using(Htm 我有一个ASP.NET MVC应用程序,显示项目列表.在我的视图页面中,我遍历项目并使用局部视图渲染每个项目,如下所示:
@foreach(var item in Model.items){   <li>       @HTML.Partial("ItemVIEw",item)   </li>}

在项目视图中,我使用具有“删除”按钮的表单来包装每个项目,如下所示:

@using(HTML.BeginForm(...)){    @HTML.HIDdenFor(m=>m.ID)    <label>@Model.name (@Model.ID)</label>    <input type="submit" value="Delete"/>}

这些项目正确呈现,生成的页面包含所有项目的清单,其中显示了正确的名称和ID.

编辑:@HIDden也是如此,显然,与我之前写的相反.

此外,这仅在第二次呈现表单时发生(即,在单击其中一个“删除”按钮后),第一次一切正常.我的动作方法如下所示:

public ActionResult Allitems(){    var model = new AllitemsModel();    return PartialVIEw(model);}public ActionResult Delete(DeleteModel model){    .... Perform the delete ...    return PartialVIEw("Allitems",new AllitemsModel());}

为什么会这样?

解决方法 我怀疑这是因为你的RouteData中已经有一个ID参数:
public ActionResult SomeAction(int ID){    var model = ...    return VIEw(model);}

并且您已经使用/ somecontroller / someaction / 123请求了该页面. HIDdenFor帮助程序现在使用路由值中的ID而不是项目的ID.尝试将项目视图模型上的属性重命名为不同于ID的内容.例如ItemID.

另一种可能性是问题仅在回发之后发生,而不是在最初呈现页面时发生.显示您的POST动作可能有助于进一步探索这种可能性.

更新:

好了,既然你已经展示了你的POST动作,事情就更清楚了:

public ActionResult Delete(DeleteModel model){    .... Perform the delete ...    return PartialVIEw("Allitems",new AllitemsModel());}

您基本上是在这里创建一个新的视图模型并将其传递给局部视图.但HTML帮助程序在绑定时始终使用ModelState中的值.并且只有在您的视图模型中的值之后.因此,如果您打算在POST *** 作中修改模型的属性,请确保首先从ModelState中删除了此值.在您的示例中,因为您已经完全划破了整个视图模型(通过创建新的AllitemsModel()),您可以清除整个ModelState:

public ActionResult Delete(DeleteModel model){    .... Perform the delete ...    // Clear the modelstate otherwise the vIEw will use the values that were initially posted    // and not the values from your vIEw model    ModelState.Clear();    return PartialVIEw("Allitems",new AllitemsModel());}

此行为是设计使然,适用于所有HTML帮助程序,而不仅适用于HIDdenFor帮助程序.

总结

以上是内存溢出为你收集整理的c# – Html.HiddenFor绑定到错误元素全部内容,希望文章能够帮你解决c# – Html.HiddenFor绑定到错误的元素所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1247654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存