如何关联由单独表单生成的实体…但却无法接触到其中一个的代码



好的,所以我试图在我的网站实现典型的图像上传功能。(我从没想过它会这么复杂!!)我终于找到了一个很棒的nuget包(MvcFileUploader),它使用jQuery-File-Upload插件。它工作得很棒,但是我在弄清楚如何将其与我的实体相关联时遇到了一点麻烦。

当文件上传时,如何创建一个Image实体是很明显的。但是,我有许多不同类型的实体,我想在图片上传后与它们相关联(例如新闻文章,博客文章,分类广告等)。

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

我想到的第一个解决方案是使用AJAX在新闻项表单中添加一个隐藏字段,以表示新的图像实体id。然而,不幸的是,我似乎找不到任何好的方法来完成这项工作,因为我没有简单易懂的访问MvcFileUploader代码,试图让它做这样的事情....它现在运行得很好,我害怕把它搞砸。:)(这是一个缩小的。js文件)(如果有人知道我如何能做到这一点,而不搞砸文件上传器插件,我很乐意听到它。)

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

我还想过在输出创建页面时简单地制作新闻项目,并将新闻项目ID输出到两个表单中…但是,我将不得不放弃任何类型的必填字段和其他约束的新闻项目字段,我将有空的新闻项目,如果用户离开页面之前完成。混乱。

我可能会把视图分开。工作流可能是这样的:

  • News创建没有文件上传器的页面
  • 表单被发送到服务器,News在数据库
  • 中创建
  • 立即重定向到此News项目的详细信息页面,右侧有文件上传器
  • 文件上传现在总是与一个现有的项目相关,可以与它相关联

这是考虑到News项目没有上传文件是有意义的,但是上传的文件没有新闻项目是没有意义的。我不知道这个假设对你的项目是否可行。

对于用户,您可以在Create页面上指示他可以在第二步中上传文件,例如:"请输入此新闻条目的信息。注:News创建完成后,可以上传相关文件。左右…

最新更新