【问题标题】:How to return value to the posting form for fixing error mvc 3如何将值返回到发布表单以修复错误 mvc 3
【发布时间】:2013-04-03 21:07:24
【问题描述】:

我有一个发布 3 条信息的表格。

  • 配方模型
  • 标签字段(字符串)
  • 文件(类型文件的输入)

在控制器端,我收到如下信息:

[HttpPost]
[Authorize]
public ActionResult Create(Recipe recipe, string taglist, HttpPostedFileBase file)
{
     if (ModelState.IsValid)
     { ...

在控制器中,我验证了上传文件和标签列表上的一些信息。如果出现问题,我会像这样返回创建视图

ModelState.AddModelError("", "You must provide at least one tag");
return View(recipe);

问题是用户提供的信息(要上传的文件或标签)在此过程中丢失。食谱中的所有字段都还在,因为我将它们传递给视图。我不想丢失任何信息。

我应该如何处理?什么是最好的方法?我考虑过创建一个特殊的模型,通过添加标签字符串来包装我的 Recipe 模型,但我不知道如何处理文件的情况,因为它不是字符串。

任何帮助将不胜感激

附加信息: 标签字符串不在配方模型中,因为标签不是数据库中的字符串,它们是附加到配方的标签列表。由于我使用的是需要字符串的 jQuery 插件,所以我这样做了,在控制器中我拆分标签字符串并将它们添加到数据库中。

【问题讨论】:

    标签: c# asp.net-mvc forms validation


    【解决方案1】:

    使用包含所有信息的视图模型。在最简单的形式中,它可能看起来像:

    public class RecipeViewModel()
    {
        public RecipeViewModel()
        {
            Recipe = new Recipe();
        }
    
        public Recipe Recipe { get; set; }
        public string TagList { get; set; }
        public HttpPostedFileBase File { get; set; }
    }
    

    然后,将此模型用于您的操作和视图:

    public ActionResult Create(RecipeViewModel model)
    {
        ...
    }
    

    【讨论】:

    • 好的,我不知道我可以在视图模型中使用 HttpPostedFileBase 类型...今晚会尝试。谢谢
    • 也许我做错了什么,但是在将代码更改为此之后,我的控制器 RecipeViewModel 始终为空。视图绑定到这个新的 ViewModel,一切似乎都正常,但在控制器端它是空的......有什么想法吗?
    • 好的,我找到了,我的参数仍然称为 RecipeViewModel 配方,这给活页夹造成了混乱!这行得通!谢谢!
    • 对不起,经过验证,它不起作用。文件名总是丢失在文件输入中。它适用于 TagList。知道为什么吗?
    • 我刚刚读到这是浏览器的正常安全措施...对不起!
    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2013-07-21
    • 2011-08-21
    相关资源
    最近更新 更多