2011-02-04 142 views
2

我有一个上传文件的控制器。我想返回一个带有bool成功的json结果(如果成功上传,否则为false)和消息(这可能是发生的错误消息,或者链接到文件或链接到图像,取决于上传的内容)。MVC返回Json结果

解决这个问题的最好方法是什么?

我有这个

public class UploadedFile 
{ 
    public bool Success { get; set; } 

    public string Message { get; set; } 
} 

然后在我的控制器中我会成功设置为true /或/和虚假信息,以<a href OR <img

我在正确的轨道上?

我如何解析这个视图,以便当图像显示图像时,如果链接显示链接,如果错误只是提醒错误。 谢谢

回答

4

你为什么要解析它?你不能提供你在Json中返回的更多信息吗?

也许这样的事情:

public class UploadedFile 
{ 
    public bool Success { get; set; } 
    public string Message { get; set; } 
    public Kind MessageKind { get; set; } 
} 

public enum Kind 
{ 
    Error, 
    File, 
    Image 
} 

根据MessageKind,你只需要使用适当的HTML显示结果。

4

你在正确的轨道上。我会建议你使用jquery form plugin这将允许你AJAXify的<form>和处理成功案例。

实施例:

型号:

public class UploadedFile 
{ 
    public bool Success { get; set; } 
    public string Url { get; set; } 
    public string Message { get; set; } 
} 

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel(); 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(HttpPostedFileBase file) 
    { 
     if (file != null && file.ContentLength > 0) 
     { 
      var images = Server.MapPath("~/images"); 
      var filename = Path.Combine(images, Path.GetFileName(file.FileName)); 
      file.SaveAs(filename); 
      return View("UploadedFile", new UploadedFile 
      { 
       Success = true, 
       Url = Url.Content("~/images/" + Path.GetFileName(file.FileName)) 
      }); 
     } 
     return View("UploadedFile", new UploadedFile 
     { 
      Success = false, 
      Message = "Please upload a file" 
     }); 
    } 
} 

检视:

<script src="@Url.Content("~/scripts/jquery.form.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(function() { 
     $('form').ajaxForm(function (result) { 
      $('#result').html(result); 
     }); 
    }); 
</script> 

@using (Html.BeginForm("index", "home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    <input type="file" name="file" /> 
    <input type="submit" value="Save" /> 
} 

<div id="result"></div> 

和UploadedFile的部分:

@model AppName.Models.UploadedFile 
@{ 
    Layout = null; 
} 

@if (Model.Success) 
{ 
    <img src="@Model.Url" alt="" /> 
} else { 
    @Model.Message 
}