我有以下视图和控制器代码:
Index.cshtml
@using (Html.BeginForm("Create", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<span style="color:green; font-weight:bold;" id="Message">@ViewBag.Message</span>
<input type="text" id="txtMessage" />
<input type="submit" id="btnSubmit" value="Submit" />
}
<script src="~/Scripts/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
$('#btnSubmit').click(function (event) {
$.ajax({
type: "POST",
url: "/Home/Create",
dataType: "json",
contentType: "application/json; charset=utf-8",
async: false,
data: JSON.stringify({
'message': $('#txtMessage').val()
})
});
});
</script>
控制器代码:
public class HomeController : Controller
{
public ActionResult Index(string message)
{
return View();
}
[HttpPost]
public ActionResult Create(string message)
{
ViewBag.Message = message;
return View("Index");
}
}
单击按钮并进行ajax调用后,我无法看到索引视图内Create
方法中ViewBag.Message
的消息集。
如果您正在使用开始表单和按钮类型作为提交,那么为什么要编写ajax方法?
从javascript代码中删除btnSubmit点击,并使用textbox作为TextBoxFor,
@Html.TextBoxFor(m => m.message, new { @class = "form-control" })
它应该工作。
更新无强类型的答案
按照代码,您正在使用开始表单,所以不需要ajax调用。因此,首先删除javascript代码,或者如果你保留这些代码,那就没有意义了。
现在需要更新以下行:
<input type="text" id="txtMessage" **name = "txtMessage"** />
在控制器代码post方法中,下面的名称应该相同。
[HttpPost]
public ActionResult Create(**string txtMessage**)
{
ViewBag.Message = **txtMessage**;
return View("Index");
}