如何使用MVC3控制器显示“消息框”

时间:2011-09-26 10:12:29

标签: jquery visual-studio asp.net-mvc-3 c#-3.0

在控制器

中执行某些代码后,我一直面临显示“消息框”的问题

代表: -

public ActionResult IsLoginExsit(CustomerDO loginData)
        {

            JsonResult jsonResult = new JsonResult();            
             if (!string.IsNullOrEmpty(loginData.UserName) && !string.IsNullOrEmpty(loginData.Password))                 
             {                     
                 bool result = Businesss.Factory.BusinessFactory.GetRegistrations().IsLoginExist(loginData.UserName, loginData.Password);                     

                     jsonResult.Data = result;

             }      
             return jsonResult;
        }

如上例所示,如果result为true或false,那么我想显示一条消息框,说明登录是suceess还是失败。

<!-- language: lang-.html -->
    <form class="formStyle" action="#" method="POST" id="frmAuthenticate">
            <div class="row">
            <input class="text row" type="text" value="" id="txtUserName"/>
            </div>
            <div class="row">
            <input class="text row" type="password" value="" id="txtPassword" /> 
            </div>  
            <div class="row last">
            <a class="link" href="">Forgot Password?</a>   
            <a class="button3" href="/Registration/Registration" title="Registration" >Signup</a>        
<input type="submit" class="button4" id="btnGo" value="Go" />            
            </div>
        </form>

如果登录存在,我想导航到“/ Customer / CollaborationPortal”,否则我想显示消息“Authroization fail”。

$("#btnGo").click(function (e) {
                var RegData = getRegData();
                if (RegData === null) {
                    console.log("Specify Data!");
                    return;
                }
 var json = JSON.stringify(RegData)
                $.ajax({
                    url: '/Registration/IsLoginExsit',
                    type: 'POST',
                    dataType: 'json',
                    data: json,
                    contentType: 'application/json; charset=utf-8',
                    success: function (data) {                     
                    if(data.result == true){                                                 
                    location.href = "/Customer/CollaborationPortal";                     
                    }                    
                     else{
                         alert("Login failed"); //or whatever                     
                     }             
                     }
                });
return false;
            });
            function getRegData() {

                var UserName = $("#txtUserName").val();
                var Password = $("#txtPassword").val();
                return { "UserName": UserName, "Password": Password };
            }

提前致谢

4 个答案:

答案 0 :(得分:3)

在MVC中没有办法像winforms应用程序那样简单。

在您的案例中,在网页上显示消息框的最简单方法是将此操作从ActionResult更改为JsonResult,并将if替换为:

return Json(new {result = result});

并且,在网页中你需要使用ajax(即使用jquery的$ .post提交表单)并在回调函数中检查结果:

$("form input[type=submit]").click(function(){
    var formData = $(this).closest("form").serialize();
    $.post("urltoyourcontrollerhere/IsLoginExsit", formData, function(data){
        if(data && data.result == true){ alert("Login exists!");}
    });
});

<强>更新 您发布的代码似乎没问题,但有一个问题。成功功能:

success: function (data) {
                        location.href = "/Customer/CollaborationPortal";
                    }

无论返回什么控制器,此函数将始终执行重定向。您需要检查data.result(如果您将json作为Json返回(new {result = result});)为true,然后重定向,否则显示alert。所以,试试:

success: function (data) {
                    if(data.result == true){                        
                        location.href = "/Customer/CollaborationPortal";
                    }
                    else{
                        alert("Login failed"); //or whatever
                    }
            }

另一件事:

            var RegData = getRegData();
            if (RegData === null)

如果你想要这个,你需要在其中一个文本框为空时从getRegData返回null。

答案 1 :(得分:3)

完成后,您可以显示消息框。

public ActionResult LoginExist(BAMasterCustomerDO loginData)
{
    return new JavascriptResult { Script = "alert('Saved successfully');" };
}

答案 2 :(得分:1)

您将无法使用服务器端代码显示消息框。您需要将一些数据传递回指示登录状态的视图,然后编写一些客户端代码以显示消息框。

答案 3 :(得分:1)

您可以使用视图模型的属性,该属性将传递给视图,其中包含以下信息:

var model = new MyViewModel();
bool result = Businesss.Factory.BusinessFactory.GetRegistrations().IsLoginExist(loginData.UserName, loginData.Password);
model.IsLoginSuccess = result;

... 

return View(model);

并且在强类型视图中,您将测试此属性的值并相应地显示消息:

@if (Model.IsLoginSuccess)
{
    <div>The Login was successful</div>
}