1个视图中的2个表单,带有1个控制器

时间:2015-04-20 08:48:26

标签: c# razor model-view-controller controller

所以情况就是这样,我有一个loginpartial.cshtml,我把它放在RenderAction的页面上

此loginpartial包含IsAuthenticated,如果用户未经过身份验证,则会显示登录表单。

其次,我有一个管理页面,其中包含一些字段,如firstname等。 当我按下保存按钮时,它可以很好地保存到数据库中。但是,登录表单也会被调用,我不知道为什么。

layout.cshtml:

@{Html.RenderAction("Login", "User");}

LoginPartial.cshtml:

<div class="nav navbar-nav navbar-right">
    @if (User.Identity.IsAuthenticated)
    {
        <div>No login</div>
    }
    else
    {
        using (Html.BeginForm("Login", "User", FormMethod.Post))
        {

        @Html.AntiForgeryToken();
        @Html.ValidationSummary(true, "Login failed.")

        <div class="Login">
               //fields here
        </div>

        }
    }
</div>

UserController登录:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Login(User user)
    {
        if (ModelState.IsValid)
        {
            if (isValid(user.Email, user.Password))
            {
                using (MVCV2DbContext MVCV2DbContext = new MVCV2DbContext())
                {
                    var users = MVCV2DbContext.Users.Single(u => u.Email == user.Email);


                    FormsAuthentication.SetAuthCookie(users.ID.ToString(), false);
                    //FormsAuthentication.SetAuthCookie(user.Email, false);
                }

                return RedirectToAction("Index", "User");
            }

        }

        return View(user);
    }

manage.cshtml:

using (Html.BeginForm("Manage", "User", FormMethod.Post))
{
    @Html.AntiForgeryToken();
    @Html.ValidationSummary(true, "Not all good")
    <div>
        //fields here
    </div>
}

usercontroller manage:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Manage(User_Details users)
    {
        if (ModelState.IsValid)
        {
            int U_ID = Convert.ToInt32(GetUserIDFromCookie());

            using (MVCV2DbContext MVCV2DbContext = new MVCV2DbContext())
            {
                var user = MVCV2DbContext.User_Details.SingleOrDefault(u => u.User_ID == U_ID);

                if (user != null)
                {
                    user.User_FirstName = users.User_FirstName;
                    user.User_Insertions = users.User_Insertions;
                    user.User_LastName = users.User_LastName;

                    MVCV2DbContext.SaveChanges();
                }

            }
        }
        return View();
    }

2 个答案:

答案 0 :(得分:0)

@{Html.RenderAction("Login", "User");}
布局文件中的

将在呈现视图时调用action方法

你可以通过移动

解决这个问题
if(User.Identity.IsAuthenticated) ... don't run auth code

离开视图并进入布局视图或控制器(对IsAuthenticated测试进行适当更改)

答案 1 :(得分:0)

而不是if(User.Identity.IsAuthenticated)尝试Request.IsAuthenticated

你的调试说法是什么?