MVC 3 Razor view BeginForm не публикуется на контроллере в FF, но работает в IE 9 - PullRequest
0 голосов
/ 26 мая 2011

У меня есть форма в виде бритвы MVC 3, которую я пытаюсь отправить на свой контроллер.

Мне нужно это:

1) Отправьте форму в действие контроллера.

2) Действие должно что-то делать с данными и возвращать статус строки (ОК, если успех или NOK, если не удалось)

3) На основании результата я мог бы перенаправить пользователя после небольшой задержки.

4) Я также хочу предотвратить повторную отправку (если возможно)

Вот так выглядит мой взгляд (я его обрезал):

@model <MyNameSpace.Model>

@{
    ViewBag.Title = "Save";
    Layout = "~/Views/Shared/MyMaster.cshtml";
}

@using (Html.BeginForm("save", "my_controller"))
{
  <div>
      @Html.TextBoxFor(m => m.Host, new { @style = "width: 520px" })

      ... set other fields on the form ...

      <input type="submit" id="btnSubmit" value="Submit"/>
  </div>
}

Это мой контроллер:

public String Save(<ModelName> model)
{
   return "OK";
}

Кажется, это работает в IE9. Но ничего не происходит в FF 4 или Opera. HttpFox не показывает активности.

Чего не хватает?

Спасибо

Ответы [ 3 ]

2 голосов
/ 26 мая 2011

В ASP.NET MVC считается хорошей практикой, когда действия вашего контроллера возвращают ActionResults вместо строк.Таким образом, будут установлены правильные заголовки типов контента, и т.д ...

Так, например:

[HttpPost]
public ActionResult Save(ModelName model)
{
    return Content("OK", "text/plain");
}

или если вы хотите вернуть какое-либо представление:

[HttpPost]
public ActionResult Save(ModelName model)
{
    return View("Success");
}
1 голос
/ 26 мая 2011

Ваш пример выглядит кошерным, поэтому либо в вашем примере кода отсутствует что-то критическое, либо вам нужно просмотреть сгенерированный HTML-код, чтобы увидеть, чего не хватает.

0 голосов
/ 26 мая 2011

Вы пропустили код, который фактически отображал представление для пользователя? Я не уверен, как это будет функционировать без немного большего. Я смоделировал ваш код и вставил то, что считал правильным.

    [HttpGet]
    public ViewResult Save()
    {
        var vm = new ModelTest();

        return View(vm);
    }

    [HttpPost]
    public ActionResult Save(ModelTest model)
    {
        //do stuff with model 

        //Set a value in TempData -- Meets requirement of storing a status
        TempData["Message"] = "OK";
        //RedirectToRoute  -- Meets requirement of preventing multiple posts partially. Some javascript will also help with this
        RedirectToRoute("routename");
    }

Сообщение произошло как и ожидалось в FF 4.01 / 5.0

Ваша модель выглядит нормально, просто не хватает кода контроллера.

Надеюсь, это поможет.

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