ImageProcessor 请求使未来的列表绑定失败
ImageProcessor request makes future List Bindings Fail
我正在努力解决我网站的问题,如果我使用 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; }
}
现在,当您单击 link 时,它会将您带到新选项卡中的以下 URL:
这会从 S3 存储桶加载图像,图像处理器会根据查询字符串中指定的值调整图像的大小。应该显示图像,它是一个笑脸:)。
现在,当您 return 返回表单时,刷新页面并再次提交表单。它将表明您提交的值 未 正确绑定。尽管以前有过!
如果在 Index
操作的 Home
控制器上放置断点,您可以观察到绑定失败的值。
现在,它将继续无法绑定此值,直到您重新启动应用程序池(如果应用程序托管在 IIS 上)或者如果您在 Visual Studio.
内重新启动应用程序
表单没有改变,值仍在发布,因为我可以在 Chrome 开发人员工具 Network
选项卡中看到,您可以看到查询字符串值在您提交表单后格式化为控制器的 this.Request.Form
值。
请你帮我确定为什么绑定之前有效,然后在加载通过图像处理器加载的图像后失败?
我花了很长时间查看此内容,试图了解为什么在使用图像处理器处理图像后绑定不起作用。
幸运的是,我已经设法使绑定再次起作用,但这需要我更改我用来绑定的每个模型。似乎如果我将模型更改为绑定到 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 - 错误已解决,我相信下一个版本会修复该问题。
我正在努力解决我网站的问题,如果我使用 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; }
}
现在,当您单击 link 时,它会将您带到新选项卡中的以下 URL:
这会从 S3 存储桶加载图像,图像处理器会根据查询字符串中指定的值调整图像的大小。应该显示图像,它是一个笑脸:)。
现在,当您 return 返回表单时,刷新页面并再次提交表单。它将表明您提交的值 未 正确绑定。尽管以前有过!
如果在 Index
操作的 Home
控制器上放置断点,您可以观察到绑定失败的值。
现在,它将继续无法绑定此值,直到您重新启动应用程序池(如果应用程序托管在 IIS 上)或者如果您在 Visual Studio.
内重新启动应用程序表单没有改变,值仍在发布,因为我可以在 Chrome 开发人员工具 Network
选项卡中看到,您可以看到查询字符串值在您提交表单后格式化为控制器的 this.Request.Form
值。
请你帮我确定为什么绑定之前有效,然后在加载通过图像处理器加载的图像后失败?
我花了很长时间查看此内容,试图了解为什么在使用图像处理器处理图像后绑定不起作用。
幸运的是,我已经设法使绑定再次起作用,但这需要我更改我用来绑定的每个模型。似乎如果我将模型更改为绑定到 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 - 错误已解决,我相信下一个版本会修复该问题。