使用 Ajax,在 MVC 中提交时文本框不清除
Using Ajax, textbox does not clear on submit in MVC
我需要你的帮助。我正在使用 AjaxBeginform 在一个小文本字段中提交问题。我可以提交问题,它 post 可以提交给数据库,但是问题永远不会解决。我正在使用 Ajax,因为我不希望整个页面都 post。我试过使用 this.rest();但这在 IE 中有效,但在 Firefox 和 Chrome 中无效。我试过 $('#question').reset();但这仍然行不通。我确定这是我做错的事情。
下面是我的代码。谢谢您的帮助。
页面顶部是我的脚本:
<script type="text/javascript" src="~/Scripts/jquery-migrate- 1.2.1.min.js"></script>
这是 AjaxBeginForm 和文本框
@using (Ajax.BeginForm("SendQuestion", new { PresId = Model.PresentationID, catalogId = ViewBag.CatalogId }, new AjaxOptions
{
HttpMethod = "Post",
UpdateTargetId = "questionTxt",
OnBegin = "OnBegin",
OnSuccess = "OnSuccess",
OnFailure = "OnFailure"
}))
{
<fieldset id="question">
<p>
<textarea id="questionTxt" style="font-size:12px" cols="20" rows="6" name="questionTxt" onclick="javascript:removeTextAreaWhiteSpace(this);"></textarea>
</p>
<button id="question-btn" type="submit">Submit</button>
</fieldset>
}
这是我的 OnSuccess 函数
function OnSuccess() {
alert("Your question has been submitted.");
$('#question').val('');
}
这是我的控制器
public bool SendQuestion(string questionTxt, long PresId, long catalogId)
{
try
{
var db = new ODTEntities();
var pres = db.Presentations.FirstOrDefault(i => i.PresentationID == PresId);
var subject = db.Catalogs.FirstOrDefault(i => i.CatalogID == catalogId).CatalogCode + " - " + pres.Title + " - " + pres.Presenter.PresenterName;
Utils.AddQuestionToDB(db, PresId, catalogId, Utils.GetAttendeeId(), questionTxt);
string body = "This question : " + Environment.NewLine + questionTxt + Environment.NewLine + " was sent by " +
User.Identity.Name;
var catalog = db.Catalogs.FirstOrDefault(i => i.CatalogID == catalogId);
if (!string.IsNullOrEmpty(catalog.QuestionsEmail))
Helper.SendMail(body, subject, catalog.QuestionsEmail, "");
else
Helper.SendMail(body, subject);
}
catch (Exception)
{
return false;
}
return true;
}
现在就像我之前说的,我试过这个,它在 IE 中会清除,但不会在 int Firefox 或 Chrome 中清除。因此,当我提交表单时,弹出窗口返回您的问题已提交,虽然弹出窗口可见,但问题变为 true,然后您在弹出窗口上单击“确定”window,文本框在 IE 中被清除:
function OnSuccess() {
alert("Your question has been submitted.");
$('#question').val('');
this.reset();
}
如果有人能告诉我我做错了什么,将不胜感激。谢谢你。
function OnSuccess() {
alert("Your question has been submitted.");
this.reset();
$('#questionTxt').val(''); //Modified, put it AFTER reset()
}
questionTxt 不是 question
为您的表单提供一个 ID,然后尝试重置它:
@using (Ajax.BeginForm("SendQuestion", new { PresId = Model.PresentationID, catalogId = ViewBag.CatalogId }, new AjaxOptions
{
HttpMethod = "Post",
UpdateTargetId = "questionTxt",
OnBegin = "OnBegin",
OnSuccess = "OnSuccess",
OnFailure = "OnFailure"
},new {id="formid"}))
}
$('#formid').reset(); // BY JQUERY
document.getElementById("formid").reset(); // BY PURE JAVASCRIPT
或者如果您在页面上只有一个表单,那么这也适用,因为这仅适用于第一个表单:
$('form:first').reset();
我需要你的帮助。我正在使用 AjaxBeginform 在一个小文本字段中提交问题。我可以提交问题,它 post 可以提交给数据库,但是问题永远不会解决。我正在使用 Ajax,因为我不希望整个页面都 post。我试过使用 this.rest();但这在 IE 中有效,但在 Firefox 和 Chrome 中无效。我试过 $('#question').reset();但这仍然行不通。我确定这是我做错的事情。
下面是我的代码。谢谢您的帮助。
页面顶部是我的脚本:
<script type="text/javascript" src="~/Scripts/jquery-migrate- 1.2.1.min.js"></script>
这是 AjaxBeginForm 和文本框
@using (Ajax.BeginForm("SendQuestion", new { PresId = Model.PresentationID, catalogId = ViewBag.CatalogId }, new AjaxOptions
{
HttpMethod = "Post",
UpdateTargetId = "questionTxt",
OnBegin = "OnBegin",
OnSuccess = "OnSuccess",
OnFailure = "OnFailure"
}))
{
<fieldset id="question">
<p>
<textarea id="questionTxt" style="font-size:12px" cols="20" rows="6" name="questionTxt" onclick="javascript:removeTextAreaWhiteSpace(this);"></textarea>
</p>
<button id="question-btn" type="submit">Submit</button>
</fieldset>
}
这是我的 OnSuccess 函数
function OnSuccess() {
alert("Your question has been submitted.");
$('#question').val('');
}
这是我的控制器
public bool SendQuestion(string questionTxt, long PresId, long catalogId)
{
try
{
var db = new ODTEntities();
var pres = db.Presentations.FirstOrDefault(i => i.PresentationID == PresId);
var subject = db.Catalogs.FirstOrDefault(i => i.CatalogID == catalogId).CatalogCode + " - " + pres.Title + " - " + pres.Presenter.PresenterName;
Utils.AddQuestionToDB(db, PresId, catalogId, Utils.GetAttendeeId(), questionTxt);
string body = "This question : " + Environment.NewLine + questionTxt + Environment.NewLine + " was sent by " +
User.Identity.Name;
var catalog = db.Catalogs.FirstOrDefault(i => i.CatalogID == catalogId);
if (!string.IsNullOrEmpty(catalog.QuestionsEmail))
Helper.SendMail(body, subject, catalog.QuestionsEmail, "");
else
Helper.SendMail(body, subject);
}
catch (Exception)
{
return false;
}
return true;
}
现在就像我之前说的,我试过这个,它在 IE 中会清除,但不会在 int Firefox 或 Chrome 中清除。因此,当我提交表单时,弹出窗口返回您的问题已提交,虽然弹出窗口可见,但问题变为 true,然后您在弹出窗口上单击“确定”window,文本框在 IE 中被清除:
function OnSuccess() {
alert("Your question has been submitted.");
$('#question').val('');
this.reset();
}
如果有人能告诉我我做错了什么,将不胜感激。谢谢你。
function OnSuccess() {
alert("Your question has been submitted.");
this.reset();
$('#questionTxt').val(''); //Modified, put it AFTER reset()
}
questionTxt 不是 question
为您的表单提供一个 ID,然后尝试重置它:
@using (Ajax.BeginForm("SendQuestion", new { PresId = Model.PresentationID, catalogId = ViewBag.CatalogId }, new AjaxOptions
{
HttpMethod = "Post",
UpdateTargetId = "questionTxt",
OnBegin = "OnBegin",
OnSuccess = "OnSuccess",
OnFailure = "OnFailure"
},new {id="formid"}))
}
$('#formid').reset(); // BY JQUERY
document.getElementById("formid").reset(); // BY PURE JAVASCRIPT
或者如果您在页面上只有一个表单,那么这也适用,因为这仅适用于第一个表单:
$('form:first').reset();