2

MVC 4 で Web アプリケーションを作成しています。ユーザーがログインしているかどうかに基づいて、別のビューを作成してレンダリングするにはどうすればよいですか? 私はプログラミングが初めてなので、正しい質問をしているかどうかわかりません。私はこれをオンラインで見ましたが、初心者がそれを行うように導くリソースは見つかりませんでした. これはコントローラーで行われると確信していますが、私の質問は、ユーザーがログインしていることを確認した後、コントローラーに別のビューをレンダリングするように指示する方法です。ただし、これを行う他の明白で効率的な方法がある場合は、誰かがこの質問に答えるために時間を割いてくれたら、とてもありがたいです。

4

2 に答える 2

1

あなたがするとき、オーバーライドがありますreturn View()

return View("myView", myModel");

例えば

public ActionResult Index()
{
    if(User.Identity.IsAuthenticated)
        return View("GoodUser");

    return View("BadUser");
}

しかし、あなたが初めての場合は、次の 2 つのことをお勧めします。

  • http://www.asp.net/mvcで無料で入手できるオンラインの呪いの穴を参照してください(右側の「重要なビデオ」と書かれている場所)。
  • MVC3 プロジェクトを作成し、メンバーシップに既に付属しているため、その方法を確認します
于 2013-06-08T22:56:07.700 に答える
0

フォーム認証を使用できます。

ビューモデル:

public class LogIN
    {
        [Required]
        [DisplayName("User name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [DisplayName("Password")]
        public string Password { get; set; }

    }

リポジトリ:

public class LogInRepository 
    {


        public bool CheckUser(string UserName, string Password)
        {

          //Query the database here and return true or false depending on the username and the password
        }
    }

コントローラ:

[HttpPost]
       public ActionResult LogOn(LogIN model, string returnUrl)
       {
           if (ModelState.IsValid)
           {
               LogInRepository rep = new LogInRepository();
               string UserRole = string.Empty;
               if (rep.CheckUser(model.UserName, model.Password))
               {
                  FormsAuthentication.SetAuthCookie(model.UserName);


                   if (!string.IsNullOrEmpty(returnUrl))
                       return Redirect(returnUrl);
                   else
                       return Redirect(FormsAuthentication.DefaultUrl);

               }
               else
               {
               ModelState.AddModelError("", "The user name or password provided is incorrect.");
               }

           }

           // If we got this far, something failed, redisplay form
           return View(model);
       }

意見:

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Account LogIn</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.UserName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserName)
            @Html.ValidationMessageFor(model => model.UserName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Password)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Password)
            @Html.ValidationMessageFor(model => model.Password)
        </div>


        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

Web.config 設定:

<authentication mode="Forms">
      <forms loginUrl="~/Test/LogOn" timeout="2880" defaultUrl="~/Test/Index" />
    </authentication>

    <authorization>
      <deny users="?" />
      <allow users="*" />
    </authorization>

ユーザーがログオンしていない場合、ユーザーはログオン ビューにリダイレクトされ、ログインしている場合はインデックス ビューにリダイレクトされます。

于 2013-06-09T03:53:30.863 に答える