微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MVC 3 Razor视图BeginForm不会发布到FF中的控制器,但是可以在IE 9中使用

如何解决MVC 3 Razor视图BeginForm不会发布到FF中的控制器,但是可以在IE 9中使用

| 我在MVC 3剃刀视图中有一个表单,试图将其发布到我的控制器上。 我需要这些: 1)将表单发布到控制器操作。 2)该操作应对数据做些事情并返回字符串状态(如果成功则为OK,否则为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没有活动。 缺什么? 谢谢     

解决方法

在ASP.NET MVC中,让控制器操作返回ActionResults而不是字符串是一种很好的做法。这样,将设置适当的内容类型标题,等等。 因此,例如:
[HttpPost]
public ActionResult Save(ModelName model)
{
    return Content(\"OK\",\"text/plain\");
}
或者如果您想返回一些视图:
[HttpPost]
public ActionResult Save(ModelName model)
{
    return View(\"Success\");
}
    ,您的示例看起来很粗糙,因此示例代码中缺少一些关键内容,或者您​​需要查看生成的HTML以查看缺少的内容。     ,您是否省略了向用户实际显示视图的代码?我不确定这将如何工作。我模拟了您的代码,并输入了我认为正确的代码。
    [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中 您的模型看起来还不错,只是缺少控制器代码。 希望这会有所帮助。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。