use*_*622 15 c# asp.net-mvc jquery
我正在尝试学习MVC,我想要做的事情是将表单提交给我的控制器中的操作,此操作将返回提交的数据.听起来很简单,但我已经尝试了几个小时而没有任何成功.我的看法:
@using (Html.BeginForm("BlogComment","Blog"))
{
@Html.ValidationSummary(true)
<legend class="AddAComment">Add a comment</legend>
<div class="commentformwrapper">
<div class="editor-text">
<span class="editor-label">User Name:</span>
</div>
<div class="editor-text">
<input type="text" id="username" />
</div>
<div class="editor-text">
<textarea id="comment" rows="6" cols="23"></textarea>
</div>
<div class="editor-field">
<input type="hidden" id="hiddendate" />
</div>
<input type="submit" id="submit" value="Create" />
</div>
}
Run Code Online (Sandbox Code Playgroud)
我的控制器:
[HttpPost]
public ActionResult CommentForm(Comment comment)
{
Comment ajaxComment = new Comment();
ajaxComment.CommentText = comment.UserName;
ajaxComment.DateCreated = comment.DateCreated;
ajaxComment.PostId = comment.PostId;
ajaxComment.UserName = comment.UserName;
mRep.Add(ajaxComment);
uow.Save();
//Get all the comments for the given post id
return Json(ajaxComment);
}
Run Code Online (Sandbox Code Playgroud)
和我的js:
$(document).ready(function () {
$('form').submit(function () {
$.ajax({
url: '@Url.Action("CommentForm")',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: {
PostId: $('.postid').val(),
UserName: $('#username').val(),
DateCreated: new Date(),
CommentText: $('#comment').val()
},
success: function (result) {
alert("success " + result.UserName);
},
error: function (result) {
alert("Failed");
}
});
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
Mob*_*ble 23
您不需要编写任何客户端代码来执行此操作,仅供参考.
要在MVC中成功使用ajax方法,您需要执行以下操作.将此密钥添加到web.config中的appsettings:
<appSettings>
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
除了包含不引人注目的ajax脚本:
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
然后在表单周围创建div容器,并用Ajax.BeginForm替换Html.BeginForm
<div id="ajaxReplace">
@using (Ajax.BeginForm("BlogComment", "Blog", null, new AjaxOptions { UpdateTargetId = "ajaxReplace", OnSuccess = "doFunctionIfYouNeedTo", OnFailure = "ShowPopUpErrorIfYouWant" }))
{
@Html.ValidationSummary(true)
<legend class="AddAComment">Add a comment</legend>
<div class="commentformwrapper">
<div class="editor-text">
<span class="editor-label">User Name:</span>
</div>
<div class="editor-text">
<input type="text" id="username" />
</div>
<div class="editor-text">
<textarea id="comment" rows="6" cols="23"></textarea>
</div>
<div class="editor-field">
<input type="hidden" id="hiddendate" />
</div>
<input type="submit" id="submit" value="Create" />
</div>
}
</div>
Run Code Online (Sandbox Code Playgroud)
然后在您的控制器中,您将返回以下内容:
return PartialView(ajaxComment);
Run Code Online (Sandbox Code Playgroud)
这将节省您维护脚本以手动执行此操作,并将使您按预期使用框架.它还可以帮助您进行数据注释验证以及随之而来的所有多汁内容,
我希望这在某种程度上有所帮助.
小智 16
试试这个:
该模型
public class Comment
{
public string CommentText { get; set; }
public DateTime? DateCreated { get; set; }
public long PostId { get; set; }
public string UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
视图和js
@model SubmitMvcForWithJQueryAjax.Models.Comment
@using (Html.BeginForm("BlogComment","Blog"))
{
@Html.ValidationSummary(true)
<legend class="AddAComment">Add a comment</legend>
<div class="commentformwrapper">
<div class="editor-text">
<span class="editor-label">User Name:</span>
</div>
<div class="editor-text">
@Html.EditorFor(m => m.UserName)
</div>
<div class="editor-text">
@Html.TextAreaFor(m => m.CommentText, new { rows="6", cols="23"} )
</div>
<div class="editor-field">
@Html.HiddenFor(m => m.DateCreated)
</div>
<div class="editor-field">
@Html.HiddenFor(m => m.PostId)
</div>
<input type="submit" id="submit" value="Create" />
</div>
}
<script type="text/javascript">
$(document).ready(function () {
$('form').submit(function () {
var serializedForm = $(this).serialize();
$.ajax({
url: '@Url.Action("CommentForm")',
type: "POST",
data: serializedForm,
success: function (result) {
alert("success " + result.UserName);
},
error: function (result) {
alert("Failed");
}
});
return false;
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
控制器
public class CommentController : Controller
{
//
// GET: /Comment/
public ActionResult Index()
{
return View(new Comment());
}
[HttpPost]
public ActionResult CommentForm(Comment comment)
{
Comment ajaxComment = new Comment();
ajaxComment.CommentText = comment.UserName;
ajaxComment.DateCreated = comment.DateCreated ?? DateTime.Now;
ajaxComment.PostId = comment.PostId;
ajaxComment.UserName = comment.UserName;
//mRep.Add(ajaxComment);
//uow.Save();
//Get all the comments for the given post id
return Json(ajaxComment);
}
}
Run Code Online (Sandbox Code Playgroud)
Dot*_*mer 13
基本上你直接传递javascript对象文字.因此,在将数据传递给控制器之前,它必须是JSON格式化的(因为您已经指定了application/json.请参阅$ .ajax调用).
那么,你缺少JSON.stringify()
data: JSON.stringify({
PostId: $('.postid').val(),
UserName: $('#username').val(),
DateCreated: new Date(),
CommentText: $('#comment').val()
}),
Run Code Online (Sandbox Code Playgroud)
要么
var someObj = {
PostId: $('.postid').val(),
UserName: $('#username').val(),
DateCreated: new Date(),
CommentText: $('#comment').val()
};
$.ajax({
/// your other code
data: JSON.stringify(someObj),
// your rest of the code
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68216 次 |
| 最近记录: |