在我的控制器中,我有两个动作,当更改组合或按下更新按钮时,将调用POST动作。这工作正常。
当我进行创建时,如果创建成功,我会使用return RedirectToAction("Index")
。
以下是问题的起点。我需要索引中的组合获取create中使用的id的selectedvalue,但我无法在Index操作中传递另一个参数,因为POST Action已经有一个。
如何将参数传递给GET操作并使用Create Action中的selectedvalue更新组合?
我尝试使用“返回视图()”,但它工作但不如预期。
这些是行动:
[HttpGet]
public ActionResult Index()
{
ViewBag.ID_CONTRATO = new SelectList(db.CAT_CONTRATOS.Where(t => (t.BAJA == null || t.BAJA == false)), "ID_CONTRATO", "CONTRATO");
ViewBag.listado = Enumerable.Empty<CAT_CONCEPTOS>();
return View();
}
[HttpPost]
public ActionResult Index(int Contrato = 0)
{
if (Contrato == 0)
{
ViewBag.ID_CONTRATO = new SelectList(db.CAT_CONTRATOS.Where(t => (t.BAJA == null || t.BAJA == false)), "ID_CONTRATO", "CONTRATO");
ViewBag.listado = Enumerable.Empty<CAT_CONCEPTOS>();
}
else
{
ViewBag.ID_CONTRATO = new SelectList(db.CAT_CONTRATOS.Where(t => (t.BAJA == null || t.BAJA == false)), "ID_CONTRATO", "CONTRATO", Contrato);
var cat_conceptos = db.CAT_CONCEPTOS.Include(c => c.CAT_CONTRATOS).Where(t => ((t.BAJA == null || t.BAJA == false) && (t.ID_CONTRATO == Contrato)));
ViewBag.listado = cat_conceptos;
}
return View();
}
[HttpPost]
public ActionResult Create(CAT_CONCEPTOS cat_conceptos)
{
if (ModelState.IsValid)
{
using (TransactionScope scope = new TransactionScope())
{
db.CAT_CONCEPTOS.Add(cat_conceptos);
db.SaveChanges();
TransaccionesController t = new TransaccionesController();
t.Transaccionar("CAT_CONCEPTOS", "Create", cat_conceptos.ID_CONCEPTO, "Se creo un concepto");
scope.Complete();
return RedirectToAction("Index");
}
}
ViewBag.ID_CONTRATO = new SelectList(db.CAT_CONTRATOS.Where(t => (t.BAJA == null || t.BAJA == false)), "ID_CONTRATO", "CONTRATO", cat_conceptos.ID_CONTRATO);
return View(cat_conceptos);
}
观点:
@model IEnumerable<SAC.Models.CAT_ACTIVOS>
@{
string controlador = ViewContext.RouteData.Values["Controller"].ToString();
}
@section head{
<link href="@Styles.Url("~/content/DataTables/css")" rel="stylesheet"/>
}
@{
ViewBag.Title = "Activos";
}
<h2>@ViewBag.Title</h2>
<div class="row-fluid">
<div class="span12">
<div class="row-fluid">
@using (Html.BeginForm("Index", "Activos"))
{
<div class="span9">
@Html.DropDownList("Contrato", (SelectList)ViewBag.ID_CONTRATO, "Seleccione un Contrato", new { @class = "span12", onchange = @"var form = document.forms[0]; form.submit();" })
</div>
<div class="span1">
<button type="submit" class="btn btn-danger span12"><i class="icon-refresh"></i></button>
</div>
<div class="span2">
@Html.ActionLink("Agregar", "Create", @controlador, new { @class = "btn btn-danger span12" })
</div>
}
</div>
</div>
</div>
@Html.Partial("Shared/_GridActivos", (IEnumerable<SAC.Models.CAT_ACTIVOS>)ViewBag.listado)
@section JavaScript{
@Scripts.Render("~/Scripts/DataTables/js")
}
答案 0 :(得分:1)
这是TempData派上用场的一种情况,作为在重定向期间存储该信息的一种方式。
TempData["MyId"] = t.ID;
return RedirectToAction("Index");
然后,在您的索引操作中:
if (TempData["MyId"] != null) {
// Retrieve ID and object from the database to load the model.
} else {
// Your existing code.
}
根据模型的大小和可序列化,您甚至可以将创建的模型对象存储在TempData中,并在Index中检索它。