所以我的强类型视图看起来像这样:
@model EmptyWeb.Models.SomeModel
@using (@Html.BeginForm(null, null, FormMethod.Post, new { id = "Form1" }))
{
<fieldset>
<div class="editor-field">
@Html.EditorFor(model => model.firstValue)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.secondValue)
</div>
<p>
<input id="Button1" type="button" value="Submit values"/>
</p>
</fieldset>
}
<input id="Text1" type="text" />
Ajax看起来像这样:
$(function () {
$(document).ready(function () {
$("#Button1").click(function () {
$.ajax({
url: "ControllerName/ActionName",
data: $("#Form1").serialize(),
success: function (result) {
$('#Text1').val(result);
},
});
});
});
});
最后行动看起来像这样:
public ActionResult ActionName(string firstValue, string secondValue)
{
if (firstValue > secondValue)
return Content("some string");
else
return Content("some other string");
}
我在这里尝试做的是将数据从表单发送到控制器,使用此数据执行一些操作,从控制器返回字符串并将此字符串写入表单外部的输入。在没有刷新页面的情况下完成所有这些,这就是我使用AJAX的原因。尝试这样做会让我无法加载资源:服务器响应状态为404(未找到)。不幸的是,我无法通过自己找到这个问题的解决方案。如果这是重复的问题,我很抱歉。所以我的问题是:我做错了什么?我该怎么做?我必须使用局部视图吗?
答案 0 :(得分:1)
1)您需要在ajax调用中添加类型:
$(function () {
$(document).ready(function () {
$("#Button1").click(function () {
$.ajax({
url: "ControllerName/ActionName",
data: $("#Form1").serialize(),
type:'POST'
success: function (result) {
$('#Text1').val(result);
},
});
});
});
});
2)将属性httppost添加到控制器,并将字符串更改为模型名称作为操作参数
[HttpPost]
public string ActionName(SomeModel model)
{
if (model.firstValue > model.secondValue)
return "some string";
else
return "some other string";
}
答案 1 :(得分:1)
我使用您的所有代码创建了一个测试应用程序,但将URL替换为我自己的方法,并且它工作得非常好。因此,我认为ajax代码的URL不正确。仔细检查您使用的网址,确保其正确无误。我还将.length添加到你要比较的字符串中。
注意:如果您的ajax在您的视图中,那么您可以通过以下方式轻松呈现正确的路径
url: "@Url.Action("ActionName")",
以下是我的观点:
@model MvcApplication1.Models.SomeModel
@using (@Html.BeginForm(null, null, FormMethod.Post, new { id = "Form1" }))
{
<fieldset>
<div class="editor-field">
@Html.EditorFor(model => model.firstValue)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.secondValue)
</div>
<p>
<input id="Button1" type="button" value="Submit values"/>
</p>
</fieldset>
}
<input id="Text1" type="text" />
<script>
$(function() {
$(document).ready(function() {
$("#Button1").click(function() {
$.ajax({
url: "Home/ActionName",
data: $("#Form1").serialize(),
success: function(result) {
$('#Text1').val(result);
},
});
});
});
});
</script>
,这是我的控制器
namespace MvcApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult ActionName(string firstValue, string secondValue)
{
if (firstValue.Length > secondValue.Length)
return Content("some string");
else
return Content("some other string");
}
public ActionResult About()
{
return View();
}
}
}
答案 2 :(得分:0)
实际上你是对的,但现在我还有另一个问题。在我的输入文本中,我得到了视图的全部html内容。知道为什么我没有得到“某些字符串”或“其他字符串”吗?
我设法解决了这个问题。问题确实是我的url它应该是url:“ActionName”因为我的url已经是ControlName / ControlName,其中第二个ControlName实际上是一个行动名称。
感谢大家的帮助。