c# – MVC3模型绑定 – 列表到隐藏字段

c# – MVC3模型绑定 – 列表到隐藏字段,第1张

概述我有一个特殊的问题 – 我有一个带有List的ViewModel用于显示图像列表: public List<int> TrackerKeys { get; set; } 这在页面的两个位置使用: @for (int i = 0; i < Model.TrackerKeys.Count(); i++){ @Html.GenerateImage(PageModes.Http, Model. 我有一个特殊的问题 – 我有一个带有List的viewmodel用于显示图像列表:

public List<int> TrackerKeys { get; set; }

这在页面的两个位置使用:

@for (int i = 0; i < Model.TrackerKeys.Count(); i++){     @HTML.GenerateImage(PageModes.http,Model.TrackerKeys[i])}

并且

@for (int i = 0; i < Model.TrackerKeys.Count(); i++){     @HTML.HIDdenFor(model => model.TrackerKeys[i])}

这是在表单中 – 当提交表单时,如果发生验证错误,则使用新的随机数字集更新TrackerKeys属性.我正在传回上一个列表,以确保用户不会再次看到相同的图像.

跟踪器键已正确设置并传递回视图.

我的问题是:

图像根据列表中的新值正确显示新图像

然而

隐藏字段的值不会更新为新值 – 它们保留原始值.

有任何想法吗?这是MVC3的错误吗?任何投入将不胜感激.谢谢.

编辑

提交前的HTML:

<img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/26.gif" wIDth="35" /><img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/33.gif" wIDth="35" /><img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/8.gif" wIDth="35" /><img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/30.gif" wIDth="35" /><img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/6.gif" wIDth="35" /><img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/18.gif" wIDth="35" />

<input ID="TrackerKeys_0_" name="TrackerKeys[0]" type="hIDden" value="26" /><input ID="TrackerKeys_1_" name="TrackerKeys[1]" type="hIDden" value="33" /><input ID="TrackerKeys_2_" name="TrackerKeys[2]" type="hIDden" value="8" /><input ID="TrackerKeys_3_" name="TrackerKeys[3]" type="hIDden" value="30" /><input ID="TrackerKeys_4_" name="TrackerKeys[4]" type="hIDden" value="6" /><input ID="TrackerKeys_5_" name="TrackerKeys[5]" type="hIDden" value="18" />

之后:
在这里纠正新的价值……

<img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/16.gif" wIDth="35" /><img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/20.gif" wIDth="35" /><img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/11.gif" wIDth="35" /><img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/19.gif" wIDth="35" /><img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/26.gif" wIDth="35" /><img alt="Security Character" height="35" src="http://localhost:51414/content/imagesCSS/15.gif" wIDth="35" />

和…
仍保留旧价值……

<input ID="TrackerKeys_0_" name="TrackerKeys[0]" type="hIDden" value="26" /><input ID="TrackerKeys_1_" name="TrackerKeys[1]" type="hIDden" value="33" /><input ID="TrackerKeys_2_" name="TrackerKeys[2]" type="hIDden" value="8" /><input ID="TrackerKeys_3_" name="TrackerKeys[3]" type="hIDden" value="30" /><input ID="TrackerKeys_4_" name="TrackerKeys[4]" type="hIDden" value="6" /><input ID="TrackerKeys_5_" name="TrackerKeys[5]" type="hIDden" value="18" />

控制器动作

[httpPost]    public ActionResult EmployerRegistration(Employerviewmodel Model)    {        if (ModelState.IsValID)        {            //do bits here        }        Model.TrackerKeys = Helper.GenerateNewNumbers(Model.TrackerKeys);         return VIEw(Model);    }
解决方法

Is this a BUG with MVC3?

哦,不,这是设计的,它是所有HTML助手在ASP.NET MVC中的工作方式. HTML帮助程序(例如HTML.TextBoxFor,HTML.HIDdenFor,…)在绑定它们的值时首先查看ModelState,然后查看Model.因此,如果您打算在POST控制器 *** 作中修改模型的某些属性,并且此属性是POST主体的一部分,则必须首先从ModelState中删除旧值:

[httpPost]public ActionResult EmployerRegistration(Employerviewmodel Model){    if (ModelState.IsValID)    {        //do bits here    }    // we clear all values from the modelstate => this will ensure that    // the helpers will use the values from the model and not those that    // were part of the initial POST.    ModelState.Clear();    Model.TrackerKeys = Helper.GenerateNewNumbers(Model.TrackerKeys);     return VIEw(Model);}

或者如果您不想清除整个ModelState(因为这将删除可能与它们关联的所有值和任何相应的模型状态错误),您只能删除实际修改的那些键:

[httpPost]public ActionResult EmployerRegistration(Employerviewmodel Model){    if (ModelState.IsValID)    {        //do bits here    }    for (var i = 0; i < Model.TrackerKeys.Count; i++)    {        ModelState.Remove(string.Format("TrackerKeys[{0}]",i));    }    Model.TrackerKeys = Helper.GenerateNewNumbers(Model.TrackerKeys);     return VIEw(Model);}
总结

以上是内存溢出为你收集整理的c# – MVC3模型绑定 – 列表到隐藏字段全部内容,希望文章能够帮你解决c# – MVC3模型绑定 – 列表到隐藏字段所遇到的程序开发问题。

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

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

原文地址:https://54852.com/langs/1223570.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存