如何解决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 举报,一经查实,本站将立刻删除。