C# 在.NETMVC中使用AJAX的嵌套表单
您好,我有一个表单,其中需要使用AJAX检查用户名字段的可用性。 这是我的密码C# 在.NETMVC中使用AJAX的嵌套表单,c#,.net,ajax,asp.net-mvc-2,forms,C#,.net,Ajax,Asp.net Mvc 2,Forms,您好,我有一个表单,其中需要使用AJAX检查用户名字段的可用性。 这是我的密码 <% using (Html.BeginForm()) { %> <%: Html.ValidationSummary(true, "Account creation was unsuccessful. Please correct the errors and try again.") %> <div> <field
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true, "Account creation was unsuccessful. Please correct the errors and try again.") %>
<div>
<fieldset>
<legend>Account Information</legend>
<div class="editor-label">
<%: Html.LabelFor(m => m.UserName) %>
</div>
<% using (Ajax.BeginForm("Checkavailability", new AjaxOptions { UpdateTargetId = "textEntered" }))
{ %>
<div class="editor-field">
<%: Html.TextBoxFor(m => m.UserName) %>
<%: Html.ValidationMessageFor(m => m.UserName) %>
</div>
<input type="submit" value="Check Avail" id="Submitt"/><br />
<span id="textEntered">Nothing Entered</span>
<% } %>
<div class="editor-label">
<%: Html.LabelFor(m => m.Email) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m => m.Email) %>
<%: Html.ValidationMessageFor(m => m.Email) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(m => m.Password) %>
</div>
<div class="editor-field">
<%: Html.PasswordFor(m => m.Password) %>
<%: Html.ValidationMessageFor(m => m.Password) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(m => m.ConfirmPassword) %>
</div>
<div class="editor-field">
<%: Html.PasswordFor(m => m.ConfirmPassword )%>
<%: Html.ValidationMessageFor(m => m.ConfirmPassword) %>
</div>
<p>
<input type="submit" value="Register" />
</p>
</fieldset>
</div>
<% } %>
帐户信息
m、 用户名)%%>
m、 用户名)%%>
m、 用户名)%%>
什么也没有进入
m、 电子邮件)%%>
m、 电子邮件)%%>
m、 电子邮件)%%>
m、 密码)%%>
m、 密码)%%>
m、 密码)%%>
m、 确认密码)%%>
m、 确认密码)%%>
m、 确认密码)%%>
问题是,当我单击check avil按钮时,会出现验证。。有没有一种方法可以只提交ajax表单和更新而不提交主表单??或实现我的检查可用性逻辑的任何方法?中没有为嵌套表单定义行为,通常建议不要这样做 您可以使用Javascript和动态更改表单的
action
属性。或者,您可以有多个命名的提交按钮,并在操作中检查所使用的按钮,并在此基础上执行计算
我不会写已经写过的东西,我会给你答案。另一种非常类似的方法是为每个提交按钮赋予不同的名称
属性,只有使用过的按钮才会发送到操作。看起来是这样的:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
try
{
string create = Request.Form["create"];
string cancel = Request.Form["cancel"];
return RedirectToAction("Index");
}
catch
{
return View();
}
}
如果您能负担得起迁移到mvc3的费用,他们已经为您正在解决的任务内置了远程验证属性。因此,您可以通过ajax调用检查表单中的不同字段,并将所有字段都放在一个表单中。我删除了ajax.begin,并添加了一个提交表单的ajax.ActionLink。。相反,它将一个参数传递给我需要检查的控制器。。这是密码
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true, "Account creation was unsuccessful. Please correct the errors and try again.") %>
<fieldset>
<div class="editor-label">
<%: Html.LabelFor(m => m.UserName) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(m => m.UserName) %>
<%: Html.ValidationMessageFor(m => m.UserName) %>
</div>
<%= Ajax.ActionLink("Checkavailability", "Checkavailability", new { UserName = "" }, new AjaxOptions { UpdateTargetId = "textEntered" }, new { id = "u" })%>
<span id="textEntered">Nothing Entered</span>
<p>
<input type="submit" value="Register" />
</p>
</fieldset>
<% } %>
m、 用户名)%%>
m、 用户名)%%>
m、 用户名)%%>
什么也没有进入
下面是用于设置要传递的参数的jQuery
<script type="text/javascript">
$(document).ready(function () {
$('#UserName').blur(function () {
changeActionURL();
});
});
function changeActionURL() {
if ($("#UserName").val() == "") {
alert('Please enter your email to check availablity');
}
else {
var url = '<%= new UrlHelper(ViewContext.RequestContext).Action("Checkavailability", "Account") %>' + '?UserName=' + $("#UserName").val();
$("#u").attr('href', url);
}
}
</script>
$(文档).ready(函数(){
$('#UserName').blur(函数(){
changeActionURL();
});
});
函数changeActionURL(){
如果($(“#用户名”).val()=“”){
警报(“请输入您的电子邮件以检查可用性”);
}
否则{
var url=''+'?UserName='+$(“#UserName”).val();
$(“#u”).attr('href',url);
}
}
控制器是
public string Checkavailability(string UserName)
{
if (UserName != "Enter text" && !String.IsNullOrEmpty(UserName))
{
string userName = UserName.ToLower();
NorthwindEntities dbContext = new NorthwindEntities();
var query = from p in dbContext.Employees
where p.FirstName.ToLower() == userName
select p;
IEnumerable<Employee> rec = query.ToList();
if (rec.Count() == 0)
{
return "You entered: \"" + UserName.ToString() + "\" available ";
}
else
{
return "You entered: \"" + UserName.ToString() + "\" already exists " +
DateTime.Now.ToLongTimeString();
}
}
return String.Empty;
}
公共字符串检查可用性(字符串用户名)
{
如果(用户名!=“输入文本”&&!String.IsNullOrEmpty(用户名))
{
字符串userName=userName.ToLower();
NorthwindEntities dbContext=新的NorthwindEntities();
var query=来自dbContext.Employees中的p
其中p.FirstName.ToLower()==用户名
选择p;
IEnumerable rec=query.ToList();
如果(记录计数()==0)
{
return“您输入:\”“+UserName.ToString()+”\“可用”;
}
其他的
{
return“您输入的:\”“+UserName.ToString()+“\”已存在”+
DateTime.Now.ToLongTimeString();
}
}
返回字符串。空;
}
您能否发布一段代码片段,说明如何检查控制器中使用的按钮动作?这似乎是一个不错的方法,但它解决了验证问题,并且支持ajax调用。为什么它不支持ajax调用?这跟那有什么关系?只需从Ajax.Beginform
移动到jQuery和类似$get()
或$Ajax
的东西。无论如何,这是使用ajax的正确方法。在回复中,您可以轻松写出错误消息。谢谢您的回答。。我刚找到一个解决办法。。我把我的工作代码贴在下面..快到了。首先,这里缺少
的开始标记。此外,这应该是可行的,但不会强制用户输入所需的数据。您希望拦截submit()
操作,而不是作为blur()
的附加操作。