1

別のビュー (実際には同じコントローラー) にメッセージを渡そうとしていますが、うまくできますが、問題があります..

私はウェブが初めてで、うまくいかないようです..

問題

そしてここに私のC#コード

if (createStatus == MembershipCreateStatus.Success)
{        
     string registrationMessage = "You have registered successfully";

     return RedirectToAction("KurumsalGiris", new { message = registrationMessage }); 
}


[AllowAnonymous] //sonradan eklendi
public ActionResult KurumsalGiris(string message="")
{

    if (User.Identity.IsAuthenticated)
        return Content("Zaten giriş yapmışsınız");

    ViewBag.RegistrationMessage = message;

    return View();
}

そしてここにhtml側

@model E_Cv.Models.LogOnModel

@{
    ViewBag.Title = "Kurumsal Giriş";
}

<h2>Kurumsal Giriş</h2>

<h2>@ViewBag.RegistrationMessage</h2>

<p>
  Please enter your user name and password.
  @Html.ActionLink("Yeni Kurum Kaydı", "KurumsalKayit")
   if you don't have an account.
</p>

そのため、別の方法で別のビューに値を渡す方法がわかりません。この種のメッセージをアドレスバーに表示したくないので、ユーザーはそれを変更する必要はありません。

第二に、「Get」メソッドでそれを行うことができますか?

4

4 に答える 4

3

リダイレクトするのではなく、別のビューを返すだけにしてみませんか? 実際、最初に投稿されたコードは、ログイン成功のビューを返すコントローラーに投稿する必要があります。

実際、ログインしたばかりのユーザーにログインを求めるページにリダイレクトするのはなぜですか?

他に考えられるオプションには、URL の文字列を暗号化する方法や、コントローラーが対応する文字列に変換する URL にフラグを渡す方法などがあります。

于 2013-02-21T15:56:27.927 に答える
2

RedirectToAction を返す代わりに、View を直接返すこともできます (2 番目のパラメータはモデルで、同じモデル クラス E_Cv.Models.LogOnModel を使用して RegistrationMessage プロパティを追加できます)。

return View("<name of the view>",
   new E_Cv.Models.LogOnModel {
     RegistrationMessage = "You have registered successfully"
   });

または、行ったように ViewBag にデータを保持します。

ViewBag.RegistrationMessage = "You have registered successfully";
return View("<name of the view>");

最後の質問に関して、メッセージが URL に表示されている場合、GET メソッドを使用しています。リダイレクトの代わりにビューを返すと、URL に何も表示されなくなります。

于 2013-02-21T16:01:55.903 に答える
2

このシナリオでは TempData を使用する必要があります

if (createStatus == MembershipCreateStatus.Success)
{        
    TempData["Message"] = "You have registered successfully";

    return RedirectToAction("KurumsalGiris"); 
}

そして、あなたの見解では

@if (TempData["Message"] != null) 
{
    <h2>@TempData["Message"]</h2>
}

または、コントローラーでそれを行いたい場合は、ビューを現在と同じに保ち、コントローラーで ViewBag.RegistrationMessage を設定します。

ViewBag.RegistrationMessage = TempData["Message"];
于 2013-02-21T16:02:05.353 に答える
1

問題がクエリ文字列を使用せずにコントローラー間でデータを渡す方法である場合、1 つのオプションは Session オブジェクトです。

if (createStatus == MembershipCreateStatus.Success)
{        
    Session["Message"] = "You have registered successfully";

    return RedirectToAction("KurumsalGiris"); 
}


[AllowAnonymous] //sonradan eklendi
public ActionResult KurumsalGiris(string message="")
{
    if (User.Identity.IsAuthenticated)
        return Content("Zaten giriş yapmışsınız");

    ViewBag.RegistrationMessage = (string) Session["Message"];

    return View();
}

ただし、これが解決しようとしている特定の問題に対する最善のアプローチであるとは限らないという以下の @Jonathan Wood に同意します。それでも、一般的なテクニックとして、知っておく価値はあります。

于 2013-02-21T15:56:34.837 に答える