如何获取在ASP.NET MVC中显示的视图的名称
本文关键字:显示 MVC 视图 NET ASP 何获取 获取 | 更新日期: 2023-09-27 18:21:31
我有一个创建新幻灯片的表单(简单CMS的一部分),目前我使用以下代码声明该表单:
创建:
@model Models.Slide
@{
ViewBag.Title = "Create New Slide";
Layout = "~/Areas/Admin/Views/Slide/_SlideLayout.cshtml";
}
<h2>Create Slide</h2>
@Html.Partial("_SlideForm", Model)
幻灯片
@model Models.Slide
@using (Html.BeginForm("Create", "Slide", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Slide</h4>
<hr />
....
编辑:
@model Models.Slide
@{
ViewBag.Title = "Edit New Slide";
Layout = "~/Areas/Admin/Views/Slide/_SlideLayout.cshtml";
}
<h2>Edit Slide</h2>
@Html.Partial("_SlideForm", Model)
这些表单是一个局部视图,我在一个"Create"视图中调用这个局部视图,该视图在我的控制器中调用一个Create方法。
然而,我希望有一个"编辑"视图,它也调用这个局部视图来呈现幻灯片形式,但我显然希望调用不同的操作方法(即编辑方法而不是创建方法)。
我知道我可以简单地重做整个表单,并将开始表单调用中的操作方法更改为"编辑",但这似乎有很多不必要的重复。有没有一种方法可以得到所谓的局部视图。也就是说,有没有一种方法可以确定表单应该在开始表单调用中使用"创建"还是"编辑"?视图本身称为"创建和编辑"。
非常感谢
只需在每个ActionMethod
中为您的ViewBag
设置值。
public ActionResult Edit()
{
// Do some edit stuff
ViewBag.FormType = "Create";
return View();
}
public ActionResult Create()
{
// Do some create stuff
ViewBag.FormType = "Create";
return View();
}
然后在您的Razor
视图中使用它:
@model Models.Slide
@{
Layout = "~/Areas/Admin/Views/Slide/_SlideLayout.cshtml";
}
<h2>@ViewBag.FormType Slide</h2>
@Html.Partial("_SlideForm", Model)
创建这个分部时,您能传递额外的参数吗?类似的东西
@using(Html.BeginForm("Partial", "Controller",
new { action = "Edit" }, FormMethod.Post, null)
您可以对Create和Edit使用相同的HttpPost操作方法。编辑和创建之间的唯一区别是,对于编辑,您将有一个要编辑其详细信息的ID。那么,为什么不使用id的值来确定表单是从"创建"视图还是"编辑"视图发布呢?
public CreateOrEditVM
{
public int SlideId {set;get;}
public string SlideName {set;get;}
}
在你的控制器里。
public ActionResult Create()
{
return View(new CreateOrEditVM());
}
public ActionResult Edit(int id)
{
var vm = new CreateOrEditVM()'
var slide = yourService.GetSlideFromId(id);
vm.SlideId=slide.Id;
vm.SlideName = slide.Name;
return View(vm);
}
[HttpPost]
public ActionResult Create(CreateOrEditVM model)
{
if(model.SlideId==0)
{
// coming from Create form
}
else
{
//Coming from Edit form
}
// to do :Save and redirect
}
请确保在局部视图中具有SlideId值。
@model CreateOrEditVM
@using(Html.Beginform())
{
@Html.TextboxFor(s=>s.SlideName)
@Html.HiddenFor(s=>s.SlideId)
<input type="submit" />
}
如果需要,可以使用相同的get方法进行创建和编辑,使用一个可以为null的整数作为参数,并基于该值,返回视图模型。