gpt4 book ai didi

c# - IFormFile 作为嵌套的 ViewModel 属性

转载 作者:行者123 更新时间:2023-12-03 13:31:47 27 4
gpt4 key购买 nike

我正在尝试使用 IFormFile 作为嵌套 ViewModel 中的属性。我在尝试将 ViewModel 绑定(bind)到运行时的 Controller 操作时遇到问题。 AJAX 请求停止并且永远不会到达操作。

这个概念性问题引用了我在 IFormFile property in .NET Core ViewModel causing stalled AJAX Request 上的具体问题。

View 模型:

public class ProductViewModel
{
public ProductDTO Product { get; set; }
public List<ProductImageViewModel> Images { get; set; }
}

嵌套 View 模型:
public class ProductImageViewModel
{
public ProductImageDTO ProductImage { get; set; }
public IFormFile ImageFile { get; set; }
}

行动:
[HttpPost]
public IActionResult SaveProduct([FromForm]ProductViewModel model)
{
//save code
}

我想知道 IFormFile 属性是否需要成为您绑定(bind)到 Controller 操作的 ViewModel 的直接属性 .

IFormFile Documentation似乎没有回答我的问题。

最佳答案

The AJAX request stalls and never reaches the action.



这是一个已知问题,已在 v3.0.0-preview 中修复,不会合并到 2.2.x 分支中。见 #4802

当使用 IList<Something> Something 发布表单时,其中 Something 直接具有 IFormFile 属性 ,它将 导致无限循环 。因为模型绑定(bind)发生在调用action方法之前,你会发现它从来没有进入action方法。此外,如果您检查任务管理器,您会发现内存使用情况非常疯狂。

按照 @WahidBitar 的建议,要绕过它,只需在 IFormFile 上创建一个包装器,以便 Something 没有 IFormFile 直接。

至于你的问题本身,改变你的代码如下:
    public class ProductViewModel    {        public ProductDTO Product { get; set; }        public List<ProductImageViewModel> Images { get; set; }    }    public class ProductImageViewModel    {        public ProductImageDTO ProductImage { get; set; }        // since this ProductImageViewModel will be embedded as List<ProductImageViewModel>        //     make sure it has no IFormFile property directly        
  
   public IFormFile ImageFile { get; set; }
          public IFormFileWrapper Image{ get; set; }          // a dummy wrapper        public class IFormFileWrapper        {            public IFormFile File { get; set;}        }    }

Now your client side should rename the field name as below:

Images[0].ProductImage.Prop1     # Your DTO prop's
Images[0].Image.File # instead of Images[0].ImageFile
Images[0].ProductImage.Prop2 # Your DTO prop's
Images[1].Image.File # instead of Images[1].ImageFile
... # other images
Product.Prop1
Product.Prop2
... # other props of Product

工作演示:

enter image description here

关于c# - IFormFile 作为嵌套的 ViewModel 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56347606/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com