![](/img/trans.png)
[英]ASP.NET MVC 2 - How can I get the selected value from a drop down into my view model?
[英]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.