1

我正在努力解决我的网站的一个问题,如果我使用 向图像发出请求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; }
}

现在,当您单击该链接时,它会将您带到新选项卡中的以下 URL:

https://localhost:44300/content/images/smileyface.png?width=260&height=100&mode=stretch&bgcolor=FFFFFF

这会从 S3 存储桶加载图像,图像处理器会根据查询字符串中指定的值调整图像大小。应该显示图像,它是一个笑脸:)。

现在,当您返回表单时,刷新页面并再次提交表单。它将表明您提交的值没有正确绑定。虽然以前是这样!

绑定失败

如果你Home在action的控制器上设置断点Index,你可以观察到值绑定失败。

现在,它将继续无法绑定此值,直到您重新启动应用程序池(如果应用程序托管在 IIS 上)或在 Visual Studio 中重新启动应用程序。

表单没有更改,值仍在发布中,因为我可以在 Chrome 开发人员工具选项卡中看到,并且您可以在提交表单后看到已Network在控制器值中格式化的查询字符串值。this.Request.Form

请您帮我确定为什么绑定之前有效,然后在加载通过图像处理器加载的图像后失败?

4

1 回答 1

1

我花了很长时间研究这个,试图了解为什么在使用图像处理器操作图像后绑定不起作用。

幸运的是,我设法使绑定再次起作用,但这需要我更改我用来绑定的每个模型。似乎如果我将模型更改为绑定到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 引起的。

2016 年 12 月 1 日 - 错误已解决,我相信该修复程序将在下一个版本中发布。

于 2015-12-27T23:43:31.290 回答