更新MVC 4控制器中的ASP HiddenField

时间:2013-03-11 19:30:03

标签: jquery asp.net-mvc-4 hidden-field

在我看来,我已经定义了一个简单的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" });
        }

在Controller中,我想将上面定义的隐藏字段分配给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();
    }

 }

1 个答案:

答案 0 :(得分:0)

通过查看您要实现的目标,我认为您需要一些常规Admin操作,一般操作和另一个操作Inquiry,他们应该使用相同View。那么,如何而不是你的路线...

AdminView/Index/Admin
AdminView/Index/Inquiry

...你使用类似的东西:

Admin/Index
Admin/Inquiry

所以你的重定向现在看起来像:

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

从这里你有两种方法。如果整个页面与隐藏几个按钮相同,则可以返回完全相同的View。否则,我会将您的共享组件放在部分View中,并为每个使用共享组件的Action都有一个页面。我将描述让你前进的第一种方法。因此,您可以执行两个返回相同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

然后在页面加载的JavaScript中,您可以使用我们在控制器中分配给ViewBag.Source的字符串执行任何操作:

<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">