Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NETMVC中使用AJAX的嵌套表单_C#_.net_Ajax_Asp.net Mvc 2_Forms - Fatal编程技术网

C# 在.NETMVC中使用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

您好,我有一个表单,其中需要使用AJAX检查用户名字段的可用性。 这是我的密码

 <% 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()
的附加操作。