1

現在、プロジェクトでMVC3モデルの検証を利用しようとしていますが、ユーザーがログインしていない場合に常にレイアウトに表示される単純なログインセクションが必要です。コードの大部分は適切に配置されています。ただし、私が立ち往生している唯一のことは、作成して返す必要のある検証メッセージについて、モデルをフォームにポストバックする方法です。

通常、次のようなものが機能します。

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

[HttpPost]

public ActionResult Login(LoginModel)
{
    if(ModelState.IsValid())
    {
        //Run Further checks & functions
        //Upon successful login, retuns to somewhere (Just site index in this example)
        return RedirectToAction("Index", "Site");
    }

    return View(model);
}

return View(model);ログインフォームを表示したいだけでは部分的にできないので、明らかにこれは機能しませんが、編集元のページにポストバックしたいのです。例:特定のページに移動して連絡し、今すぐログインしたい。いつでも利用できるフォームに詳細を入力し、詳細を入力します。エラーが発生し(パスワードが正しくない、ログインが正しくない、アカウントが存在しないなど)、フォームに入力した詳細(明らかにパスワードを除く)と検証の概要が入力された状態で連絡先ページに戻る必要があります作業中など...

また、レイアウトがレンダリングしたページ上のフォームは、(モデルなどで)正しく機能する必要があります。

他の送信/返品手段でこれを機能させる方法についての提案を受け付けていますが、MVCモデルの検証を機能させることが理想的です。

誰かが私に何か言われたことを詳しく説明する必要がある場合は、遠慮なくコメントしてください。しばらく積極的に対応させていただきます。

4

2 に答える 2

0

この質問を参照してください:MVC3マスターページ(_layout)に値を渡すにはどうすればよいですか? モデルをレイアウトに渡すために何をすべきかについての完全なガイドがあります

于 2012-08-21T11:02:01.720 に答える
0

ログイン用の部分ビューを作成する必要があります。「@Html.BeginForm」を使用する代わりに、@ Html.AjaxBeginを使用して、Ajax呼び出しでページを送信し、ログインビューのRenderHtmlStringを使用します。例えば

public ActionResult Login(LoginModel)
{
    if(ModelState.IsValid())
    {
        //Run Further checks & functions
        //Upon successful login, retuns to somewhere (Just site index in this example)
        return RedirectToAction("Index", "Site");
    }

    return RenderPartialViewToString("Login",model);
}

protected string RenderPartialViewToString(string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = ControllerContext.RouteData.GetRequiredString("action");

        ViewData.Model = model;

        using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
            ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);
            return sw.GetStringBuilder().ToString();
        }
    }

部分ビューの「 RenderHtmlString 」を返す「RenderPartialViewToString」メソッドを追加した後。このメソッドにパラメータとしてviewNameとModelを渡す必要があります。あなたのpartailビューで。

<div id="targetId">
</div>

@using(Ajax.BeginForm("Login",new AjaxOptions{ HttpMethod="POST", UpdateTargetId="targetId"}))
{
  <input type="submit" value="save" />
}

注:結果が追加されるUpdateTargetIdを渡す必要があります。

于 2012-09-19T14:18:03.177 に答える