【问题标题】:Updating a ASP HiddenField in a MVC 4 controller在 MVC 4 控制器中更新 ASP HiddenField
【发布时间】:2013-03-11 19:30:02
【问题描述】:

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

 }

【问题讨论】:

  • 为什么在 mvc 应用中使用经典的 asp 标签?
  • 是的,完全错误的方法。
  • 我很确定我错了,因为我的方法不起作用。请告诉我我该怎么做。

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


【解决方案1】:

通过查看您要实现的目标,我认为您需要一些通用的 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">

【讨论】:

  • 非常感谢您的回复。这个解决方案比我看到的要干净得多。
猜你喜欢
  • 2012-12-01
  • 2016-02-28
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多