我有一个包含以下代码的视图:
@using (Html.BeginForm("GenerateQrCode", "QrCodeGenerator", FormMethod.Post ))
{
<input type="submit" value="Generate" />
}
这只是一个提交按钮,它调用我控制器中的代码:
public void GenerateQrCode()
{
}
我的控制器中的方法是否有可能从表单中返回一个值,但不能转到另一个页面?因为我注意到目前,在按下表单按钮时,它会尝试导航到不存在的“GenerateQrCode”页面(与控制器方法同名)。
更新:
我尝试过的东西是让控制器方法返回一个ActionResult,并返回一个'RedirectToAction',并简单地调用相同的视图。但是,我在这个方法中也有代码'ViewBag.Message =“myMessage”;然后在我看来我有代码'@ ViewBag.Message',所以我希望视图将使用ViewBag消息属性更新,但它不会出现。
答案 0 :(得分:0)
您使用的Html.BeginForm
版本告诉提交按钮发布到GenerateQrCode
操作。也许您可以尝试更适合您目的的Html.BeginForm
{{1}}?
答案 1 :(得分:0)
使用javascript: 处理click事件。 在处理程序中,阻止默认操作并停止事件传播。 Make和AJAX使用表单数据调用服务器。 获得回复并采取进一步行动。
答案 2 :(得分:0)
因此,如果我有这个权利,您希望提交一个操作而不实际考虑服务器的响应。听起来你需要jQuery post
:
$.post(url, $("form selector").serialize(), function () {
// This is where you put a callback function.
});
这就是你所需要的一切。这将发布数据。你可以做的是从按钮click
事件而不是表单提交按钮调用它。或者,您可以覆盖表单上的submit
事件,并将其作为第一行代码:
e.preventDefault();
其中e
是您的事件参数。这将阻止发生默认操作,在这种情况下是提交表单和加载响应。
答案 3 :(得分:0)
最简单的方法是使用RedirectToAction方法,在参数中指定控制器的名称。我还使用TempData变量将结果(在本例中只是一个字符串值)传递回视图,并传递给ViewBag变量。
public ActionResult QrCodeGenerator()
{
ViewBag.Message = TempData["Message"];
return View();
}
public ActionResult GenerateQrCode()
{
TempData["Message"] = "myMessage";
return RedirectToAction("QrCodeGenerator");
}