如何获取在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方法。

然而,我希望有一个"编辑"视图,它也调用这个局部视图来呈现幻灯片形式,但我显然希望调用不同的操作方法(即编辑方法而不是创建方法)。

我知道我可以简单地重做整个表单,并将开始表单调用中的操作方法更改为"编辑",但这似乎有很多不必要的重复。有没有一种方法可以得到所谓的局部视图。也就是说,有没有一种方法可以确定表单应该在开始表单调用中使用"创建"还是"编辑"?视图本身称为"创建和编辑"。

非常感谢

如何获取在ASP.NET MVC中显示的视图的名称

只需在每个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的整数作为参数,并基于该值,返回视图模型。