Asp.net 如何关联由单独表单生成的实体。。。而无法访问一个的代码

Asp.net 如何关联由单独表单生成的实体。。。而无法访问一个的代码,asp.net,entity-framework,asp.net-mvc-4,jquery-file-upload,asp.net-mvc-file-upload,Asp.net,Entity Framework,Asp.net Mvc 4,Jquery File Upload,Asp.net Mvc File Upload,好的,我正在尝试在我的网站上实现典型的图像上传功能。(我从没想到它会如此复杂!!!)我终于找到了一个很棒的nuget软件包(),它使用了这个插件。它的工作原理非常棒,但我在弄清楚如何将其与我的实体相关联时遇到了一点困难 上传文件时,如何创建图像实体是显而易见的。但是,我有许多不同类型的实体,我希望在上传图片后与之关联(例如新闻文章、博客文章、分类广告等) 我目前设置它的方式是,我在页面的右侧有一个文件上传器,在左侧有一个新闻帖子的表单。文件上传器完成它的工作并上传一个文件,在这个过程中创建图像实

好的,我正在尝试在我的网站上实现典型的图像上传功能。(我从没想到它会如此复杂!!!)我终于找到了一个很棒的nuget软件包(),它使用了这个插件。它的工作原理非常棒,但我在弄清楚如何将其与我的实体相关联时遇到了一点困难

上传文件时,如何创建图像实体是显而易见的。但是,我有许多不同类型的实体,我希望在上传图片后与之关联(例如新闻文章、博客文章、分类广告等)

我目前设置它的方式是,我在页面的右侧有一个文件上传器,在左侧有一个新闻帖子的表单。文件上传器完成它的工作并上传一个文件,在这个过程中创建图像实体。当我想将这些新的图像实体与我的新闻实体相关联时,问题就出现了。(请记住,在创建图像实体时,尚未创建任何新闻实体。)

想到的第一个解决方案是使用AJAX在新闻项表单中插入一个隐藏字段来表示新的图像实体id。然而,不幸的是,我似乎找不到任何好的方法来实现这一点,因为我没有简单易懂的访问MvcFileUploader代码的权限来尝试让它实现这一点。。。。而且它现在运行得很好,我害怕把它搞砸(这是一个缩小的.js文件。)(如果有人知道我如何在不破坏文件上传器插件的情况下轻松、干净地完成这项工作,我很乐意听到这个消息。)

因此,我的下一个想法是,我可以创建另一种实体,其唯一目的是将图像和新闻项目连接在一起。我要做的是在输出表单时创建新实体(称为XYZ),并在新闻项表单和图像上载表单中放置一个隐藏字段(因为mvcfileuploader提供了将隐藏字段输出到表单中的功能,以便与文件上载请求一起上载)。这些隐藏字段将分别包含此特定新闻文章的XYZ实体的ID。当我创建图像实体时,我会将其ID放在XYZ实体中,等待新闻项在创建时检索。我想这可能行得通,但感觉非常混乱。我不喜欢仅仅为了这个目的而有另一个实体的想法,在创建新闻项目(或者用户只是离开新闻项目创建页面)之后,我的数据库中仍然会有这些实体。我得定期清理一下

我还考虑过在输出创建页面时制作新闻项,并将新闻项ID输出到两种形式中。。。但是,我必须放弃任何类型的必填字段和对新闻项字段的其他限制,如果用户在完成之前离开页面,我将有空的新闻项。也很乱


请有人帮忙:)。

我可能会把视图分开。工作流可能是,例如:

  • News
    不使用文件上传器创建页面
  • 表单将被发布到服务器,并在数据库中创建
    News
  • 立即重定向到此
    新闻
    项目的详细信息页面,文件上载程序位于右侧
  • 文件上载现在始终与现有项目相关,并且可以与之关联
这就需要记住,
新闻
项目没有上传的文件是有意义的,但是上传的文件没有新闻项目是没有意义的。我不知道这对你的项目来说是否是一个可行的假设


对于用户,您可以在创建页面上指示他可以在第二步中上载文件,例如:“请输入此新闻项目的信息。注意:您可以在创建
新闻后上载相关文件。”或者…

我可能会分离视图。例如,工作流:
News
Create page without file uploader->form被发布到服务器,并且
News
在DB中创建->重定向到此
News
项目的详细信息页面,该
News
项目右侧有文件上传器->文件上传现在始终与现有项目相关,并且可以关联。这就需要记住,
News
项目如果没有上传的文件就有意义,但是如果没有
News
项目,上传的文件就没有意义。我不知道这对你的项目来说是否是一个可行的假设。这主意不错。如果我不能在创建页面上使用文件上传程序,我会记住这一点,但我仍然想在创建页面上使用。@Slauma:你知道吗。。。我想得越多,就越喜欢你的想法。我可以使用手风琴或旋转木马将所有内容保持在同一“页面”上,但在不同的时间加载它们。如果你的回答是真实的,我会接受。我现在已经把它作为一个答案写下来了。实际上,我已经开始把它作为一个答案来写了,但后来停了下来,因为它似乎更像是一个解决问题的方法,而不是一个真正的解决方案。如果有解决方案,我也会感兴趣,但我相信如果文件数据在新闻项目之前发布,您必须以某种方式缓存它们。数据库、会话、一些自定义缓存,所有的解决方案都会有点难看,我认为……还有其他几种方法可以做到这一点——但我经常会创建一个临时实体——订单/项目通常都是这样做的——你有临时“购物车”记录,当实际订购时,这些记录会保存为“真实”实体。你不应该逃避它,web大多数时候是无状态的,所以Db很方便,它通常是最干净的方式。