0

私の見解では、単純な asp:HiddenField を次のように定義しました。

<asp:HiddenField ID="hdnUserRole" runat="server" />

これで、RedirectToAction が次のように定義されました。

if (Something)
        {
            return RedirectToAction("Index", "AdminView", new { UserRole = "Admin" });
        }
        else
        {
            return RedirectToAction("Index", "AdminView", new { UserRole = "Inquiry" });
        }

コントローラーでは、上記で定義した非表示フィールドを UserRole の値に割り当てたいと考えています。ここでのアイデアは、ビューにある [更新] ボタンを非表示にすることです。jQuery(document).ready 関数でも同じことを行う予定です。皆さんの助けや代替アプローチがあれば感謝します。

 public class AdminViewController : Controller
{
    //
    // GET: /AdminView/

    #region Index With Roles

    public ActionResult Index(String UserRole)
    {
        if (UserRole == "Admin")
        { 
            //ToDo: Update the hidden field "hdnUserRole"

        }
        else if (UserRole == "Inquiry")
        { 

        }

        return View();
    }

 }
4

1 に答える 1

0

あなたが達成しようとしていることを見ると、いくつかの一般的なアクションが必要だと思います。一般的なAdminアクションと別のアクションが呼び出されInquiry、同じものを使用する必要がありますView。だから、あなたのルートの代わりに...

AdminView/Index/Admin
AdminView/Index/Inquiry

...次のようなものを使用します:

Admin/Index
Admin/Inquiry

したがって、リダイレクトは次のようになります。

return ReidrectToAction("Index", "Admin")
return RedirectToAction("Inquiry", "Admin")

ここから2つのアプローチがあります。いくつかのボタンを非表示にすることを除いてページ全体が同じである場合は、まったく同じを返すことができますView。それ以外の場合は、共有コンポーネントを部分的に配置し、両方が共有コンポーネントを使用するViewそれぞれのページを作成Actionします。私はあなたを動かすための最初のアプローチを説明します。したがって、両方が同じを返す2つのアクションを持つことができますView

public class AdminController : Controller
{
    //
    // GET: /Admin/Index

    public ActionResult Index()
    {
        ViewBag.Source = "admin";
        return View("Index");
    }

    //
    // GET: /Admin/Inquiry

    public ActionResult Inquiry()
    {
        ViewBag.Source = "inquiry";
        return View("Index");
    }
}

Viewがと呼ばれIndex、にあると仮定しましたViews/Admin

ViewBag.Source次に、JavaScript on page loadで、コントローラーで割り当てた文字列を使用して、好きなことを行うことができます。

<script type="text/javascript">
    var context = '@ViewBag.Source'; // will be 'admin' or 'inquiry'
</script>

しかし、あなたが達成しようとしていることで、あなたはあなたのかみそりでそれをするのが最善かもしれません。

@if(ViewBag.Source == "admin") // I came from Admin/Index!
{
    <button type="button">Update</button>
}

それでもページに非表示フィールドが必要な場合は、次を使用できます。

@Html.Hidden("Source", (string)ViewBag.Source) // must cast

これにより、次のhtmlがレンダリングされます。

<input id="Source" name="Source" type="hidden" value="admin">
于 2013-03-11T20:47:34.287 に答える