繁体   English   中英

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

[英]How can I get the name of the view being displayed in the ASP.NET MVC

我有一个创建新幻灯片的表单(简单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方法。

但是,我希望有一个“编辑”视图,该视图也调用此局部视图以呈现幻灯片形式,但是我显然想调用其他操作方法(即,编辑方法而不是创建方法)。

我知道我可以简单地重做整个表单并在begin表单调用中将操作方法​​更改为“ Edit”,但这似乎有很多不必要的重复。 有没有一种方法可以获取称为局部视图的视图。 即有没有一种方法可以确定表单在开始表单调用中应使用“创建”还是“编辑”? 视图本身称为创建和编辑。

非常感谢

只需在每个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方法进行创建和编辑,使用可为空的整数作为参数并基于该值返回Viewmodel。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM