ASP.asp.net MVC ViewBag值在Ajax调用后不显示在视图中



我有以下视图和控制器代码:

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");
}

最新更新