0

UsernameTextboxビューで有効なデータをチェックするjquery関数があります。Registerこのフィールドが有効になるまで、ユーザーがボタンをクリックできないようにします。

ボタンを無効にするのが最善の方法ですか?値が有効でない場合、ユーザーがボタンをクリックしてフィールドにフォーカスするだけUsernameTextboxですか?

更新コード:

ここに私のモデルがあります:

    [Required]
    [Remote("CheckUsername", "Account", ErrorMessage = "Username already exits.")]
    public string Username { get; set; }

およびGETメソッドを使用したコントローラー:

[HttpGet]
    public JsonResult CheckUsername(string userName)
    {
        var user = IUserRepo.GetUserByUrName(userName);
        bool isValid = true;
        if (user!=null)
        {
            isValid = false;
        }
        return Json(isValid, JsonRequestBehavior.AllowGet);
    }

そして私の見解では:

 @using (Ajax.BeginForm("Register","Account",new {area = "Area"},null))
    {
        @Html.ValidationSummary(true) 
        <table>
            <tbody>
                <tr>
                    <td class="info_label">Tên đăng nhập</td>
                    <td>@Html.EditorFor(m => m.User.Username)
                    </td>
                    <td class="check_user">@Html.ValidationMessageFor(m => m.User.Username)</td>
                </tr>
                <tr> ........

エラーメッセージが表示されないのはなぜですか? そして、ユーザーがデータを入力したり、このサイトhttp://yame.vn/TaiKhoan/DangKyのようにテキストボックスを離れたりしたときに、中間的に有効にしたいと考えています。

4

3 に答える 3

3

:以下の提案は、MVC3以降のみを対象としています

Luffy、Ajax Call を削除して UserName の存在を確認できます

どうすればそれができますか?

モデル

public class UserModel
{
    // Remote validation is new in MVC3. Although this will also generate AJAX
    // call but, you don't need to explicitly type the code for Ajax call to
    // check the User Existence. Remote Validation will take care of it.
    [Required]
    [Remote("CheckUsername", "Account", ErrorMessage = "User Already Exist")]
    public string UserName { get; set; }
}

コントローラ

[HttpGet]
public JsonResult CheckUsername(string MyProp)
{
    // Your Validation to check user goes here
    bool isValid = true;
    return Json(isValid, JsonRequestBehavior.AllowGet);
    //Note - This will be called whenever you post the form.
    //This function will execute on priority, after then the Index 
    //Post Action Method.
}

[HttpGet]
public ActionResult Index()
{
    return View();
}

[HttpPost]
public ActionResult Index(UserModel model)
{
    // This action method will execute if the UserName does not exists 
    // in the DataBase
    return View(model);
}

意見

@using (Ajax.BeginForm("Action", "Controller", new { area = "Area" }, null))
{
    @Html.TextBoxFor(i => i.UserName);
    <input type="submit" name="Submit" value="Submit" />
    // Whenever you submit the form, the control will go directly to 
    // CheckUsername function. In case the UserName doesn't exists only 
    // then the Post action method will be executed.
}

スクリプト

<script src="jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="jquery.validate.min.js" type="text/javascript"></script>
<script src="jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
于 2013-08-07T12:59:08.993 に答える
0

jQuertの有効/無効ボタンメソッドを使用する方が良いかもしれません。

Fistly ボタンは無効です:

$(document).ready(function(){
$( ".register" ).button("disabled");
});

関数がtrueを返す場合は、ボタンを有効にします

function CheckUserNameExits() {

//*If your function is success
$( ".register" ).button( "enable" );

})
于 2013-08-07T16:40:47.960 に答える