0

在 ASP.NET MVC3 项目中,我有 2 个控制器:一个是

家庭控制器.cs

public class HomeController : Controller
{
    //
    // GET: /Home/

    public ActionResult Index()
    {
        return View();
    }

    //
    // POST: /Home/CheckLogin/

    [HttpPost]
    public ActionResult CheckLogin()
    {
        // setting the session variable if login is correct
        // and redirecting to /ReWeb/

        // else, reloading the login.
    }
}

另一个是ReWebController.cs

public class ReWebController : Controller
{
    //
    // GET: /ReWeb/

    public ActionResult Index()
    {
        // Session verification
        if (Session["_ReWeb"] != null)
        {
            return View();
        }

        // If session is null or not valid,
        // redirect to login page
        return RedirectToAction("Index", "Home");
    }
}

在登录页面中,即HomeController Index操作返回的视图,我有以下表单:

<div id="loginPanel">
    <form enctype="application/x-www-form-urlencoded" id="login" method="post">
        <h1>Log In</h1>
        <fieldset id="inputs">
            <input id="Utente" name="Utente" type="text" placeholder="Utente" autofocus="true" required="true" />   
            <input id="Password" name="Password" type="password" placeholder="Password" required="true" />
        </fieldset>
        <fieldset id="actions">
            <input type="submit" id="submit" value="Log in" onclick="javascript:window.open('/Home/CheckLogin/', 'WebClient', 'width=500,height=250,left=100,top=100')"/>
        </fieldset>
    </form>
</div>

我要做的是,当用户单击登录按钮时,应用程序会在弹出页面中返回ReWebController的视图。根据我在这里所做的,它会打开弹出窗口,但会出现 404 错误:“/”应用程序中的服务器错误。无法找到该资源。请求的 URL:/Home/CheckLogin/

我怎样才能完成这种方法?我做对了吗?

非常感谢!

4

2 回答 2

1

您收到 404 错误是因为您的 HomeController 仅包含一个接受 POST 请求的 CheckLogin 操作。单击登录按钮时,您只需在新窗口中加载一个 URL,这是一个 GET 请求。

处理此问题的一个选项是让您的 CheckLogin 操作返回一个包含 true 或 false 的 JSON 对象,具体取决于登录是否成功。在您的登录视图中,您可以执行以下操作:

$('form#login').submit(function () {
    var data = {}; // put the login data in here

    $.post('/Home/CheckLogin', data, function (result) {
        // Here you can check 'result'
        if (result.success === true) {
            window.open('/ReWeb', 'WebClient', 'width=500,height=250,left=100,top=100');
        }
        else {
            // The login failed
        }
    }).error(function() {
        // Something went wrong when trying to make the request.
        // Like a 404, 501, ... error
    });

    return false;
});
于 2012-09-18T10:02:17.753 回答
0

您可以将action="Checklogin"添加到表单元素中。

于 2012-09-18T13:43:18.620 回答