ASP.NET MVCではログインを実現して元の画面に戻る

7139 ワード

フォームをコミットし、ユーザーがログインしていない場合はログインページにジャンプし、ログイン後、元のフォームにジャンプしてこのページをコミットし、フォームインタフェースのデータを保持する必要があります.
 
フォームをコミットするページは強力なタイプのビューページです.フォームインタフェースをコミットする必要があるデータを考慮しない場合は、まずこのようなモデルを設計します.
 
public class Student
{
    public string Name{get;set;}
    public string ReturnUrl{get;set;}
}

 
フォームを するビュー・ページには、 のように かれています.
 
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    @Html.Hidden("ReturnUrl", Request.Url.PathAndQuery)
    @Html.TextBoxFor(m => m.Name)
    <input type="submit" value="  "/>
}

 
コントローラには のように かれています.
 
public ActionResult Index()
{
    return View(new Student());
}
[HttpPost]
public ActionResult Index(Student student)
{
    return Redirect(student.ReturnUrl);
}

 
しかし,フォームコミットの いタイプのビューページに ったが,フォームデータは されなかった.
 
そこで、 のような い を えました.
return View("someview", somemodel);
 
someviewの はどうやって しますか?
 
public ActionResult Index()
{
    return View(new Student());
}

、actionの を するとビューの を することに します!
 
Modelの :
 
    public class Student
    {
        public string Name { get; set; }
        public string ControllerName { get; set; }
        public string ActionName { get; set; }
    }

 
ルーティングからaction を し、StudentのActionNameプロパティに り てることができます.
 
    public class HomeController : Controller
    {
        
        public ActionResult Index()
        {
            Student student = new Student()
            {
                ActionName = this.ControllerContext.RouteData.Values["action"].ToString(),
                ControllerName = this.ControllerContext.RouteData.Values["controller"].ToString()
            };
            return View(student);
        }
        [HttpPost]
        public ActionResult Index(Student student)
        {
            ViewBag.msg = "     ~~";
            //     ,   ,           
            return View(student.ActionName, student);
        }
    }    

、student.ActionName はaction でありview でもあります.
 
フォームを する いタイプのビュー・ページでは、 の を います.
 
@model MvcApplication1.Models.Student
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
<div>@ViewBag.msg</div>
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(m => m.Name)
    <input type="submit" value="  "/>
}

 
したがって、 で する に しては、ジャンプだけでは であり、あるビューにModelを す があるが、その は、1、ルーティングからaction を する2、action 、view が することである.