我正在努力解决我的网站问题,如果我使用ImageProcessor.Web
向图像发出请求,那么它会阻止某些未来的List<>
绑定请求生效。
我不确定这是一个错误,还是一个配置问题,但我一直在努力找到它的底部。
为了证明这种绑定问题,我已将我的整个网站剥离回解决方案。
我已将测试应用程序放在S3的以下地址: https://s3.amazonaws.com/bindingissue/BindingIssue.zip
如果您打开应用程序,请运行网站项目并导航至 https://localhost:44300/ ,它会显示以下表单:
如果您提交表单,您将看到该页面指示文本框中的值已绑定,并且提交的值显示在表单中。
表单元素的名称是FilledInValues[0]
,它将值绑定到名为FilledInValues
的名为List<string>
的控制器操作中的变量。
[HttpPost]
public ActionResult Index(TestViewModel requestResponseModel)
{
if (requestResponseModel.FilledInValues != null && !string.IsNullOrWhiteSpace(requestResponseModel.FilledInValues[0]))
{
ViewBag.Success = true;
}
else
{
ViewBag.Success = false;
}
return View(requestResponseModel);
}
这是受到约束的模型:
public class TestViewModel
{
public string UrlId { get; set; }
public string QuizName { get; set; }
public int QuestionId { get; set; }
public List<int?> SelectedAnswers { get; set; }
// This is the value that fails to bind
public List<string> FilledInValues { get; set; }
public bool? IsEmbed { get; set; }
}
现在,当您点击该链接时,它会转到新标签页中的以下网址:
这将从S3 Bucket加载图像,Image Processor根据查询字符串中指定的值调整图像大小。应该显示图像,这是一个笑脸:)。
现在,当您返回表单时,请刷新页面并再次提交表单。它表示您提交的值不正确绑定。即使它之前做过!
如果在Home
操作的Index
控制器上放置断点,则可以观察到无法绑定的值。
现在,在重新启动应用程序池(如果应用程序托管在IIS上)或者在Visual Studio中重新启动应用程序之前,它将继续无法绑定此值。
表单尚未更改且值仍在发布,因为我可以在Chrome开发人员工具Network
标签中看到,您可以看到已在控制器{{{ 1}}一旦你提交了表格,就会有价值。
请您帮助我确定绑定的原因,然后在加载通过图像处理器加载的图像后失败?
答案 0 :(得分:1)
我花了很长时间看这个试图看看为什么在使用Image Processor操作图像后绑定不起作用。
幸运的是,我已经设法再次进行绑定工作,但它会让我更改我用来绑定的每个模型。似乎如果我将模型更改为绑定到IList<>
而不是List<string>
,则与索引的绑定会再次起作用。
public class TestViewModel
{
// Changed from List<string> to IList<string> and it works now
public IList<string> FilledInValues { get; set; }
}
它让我想知道导致这种情况的原因以及是否存在某些可能导致错误的错误。我会尽力让你知道。
这与我在官方ImageProcessor Github存储库上发布的Bug #284相关联。似乎这是由库中定义的List<T>
的TypeConverter引起的。
12/01/2016 - Bug已经解决,我相信修复程序将在下一个版本中发布。