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