MVC вернуть результат Json - PullRequest
       4

MVC вернуть результат Json

2 голосов
/ 04 февраля 2011

У меня есть контроллер, который загружает файл. Я хотел бы вернуть результат json с успешным завершением bool (при успешной загрузке, иначе false) и сообщение (это может быть сообщение об ошибке, ИЛИ ссылка на файл ИЛИ ссылка на изображение, в зависимости от того, что было загружено).

Какой лучший способ подойти к этому?

У меня есть это

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

    public string Message { get; set; }
}

затем В моем контроллере я установил бы для Success значение true / или / false, а для сообщения значение <a href OR <img

Я на правильном пути?

Как бы я тогда проанализировал это в представлении, чтобы при изображении оно показывало изображение, если ссылка показывала ссылку, если ошибка просто предупреждала об ошибке. спасибо

Ответы [ 2 ]

4 голосов
/ 04 февраля 2011

Вы на правильном пути.Я бы порекомендовал вам использовать плагин jquery form , который позволил бы вам 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
}
4 голосов
/ 04 февраля 2011

Почему вы хотите разобрать это?Не могли бы вы предоставить больше информации о том, что вы возвращаете в 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для отображения результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...