У меня есть базовая модель:
public class Events
{
public int Id { get; set; }
public string title { get; set; }
public string amount { get; set; }
public string Finance_Approval { get; set; }
}
Я хочу подключить два разных контроллера к одному представлению, один для запрашивающих, которые могут заполнять только поля заголовка и суммы.
И второй контроллер для Финансового менеджера, чтобы утвердить запрос, заполнив поле Finance_Approval в таблице.
Я создал два контроллера и их бритвенные виды следующим образом:
Контроллер запросов:
public ActionResult Index()
{
return View();
}
public ActionResult Request(Events e)
{
_context.evt.Add(e);
_context.SaveChanges();
return Content("Added");
}
Это Razor View:
@using (Html.BeginForm("Request", "Requester"))
{
<div class="form-group">
@Html.LabelFor(a => a.title)
@Html.TextBoxFor(a => a.title, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(a => a.amount)
@Html.TextBoxFor(a => a.amount, new { @class = "form-control" })
</div>
<button class="btn btn-primary">Request</button>
}
А это финансовый контролер:
public ActionResult Index()
{
return View();
}
public ActionResult Approve(Events e)
{
_context.evt.Add(e);
_context.SaveChanges();
return Content("Approved!");
}
А это его бритва:
@using (Html.BeginForm("Approve", "Finance"))
{
<div class="form-group">
@Html.LabelFor(a => a.Finance_Approval)
@Html.TextBoxFor(a => a.Finance_Approval, new { @class = "form-control" })
</div>
<button class="btn btn-primary">Approve</button>
}
Теперь, основываясь на проектах вида бритвы для обоих контроллеров, Запрашивающая сторона может вставить в два предопределенных поля, которые являются заголовком и суммой, как и финансовый менеджер, который является только полем Finance_Approval.
Но проблема в том, что всякий раз, когда финансовый менеджер одобряет запрос от своего портала, допустим, с некоторым значением, как «Да», тогда это значение вставляется в совершенно новую строку, которая не имеет никакого отношения к строкам, заполненным запрашивающие.
Я хочу, чтобы финансовый менеджер мог утверждать строки, которые имеют какое-то значение (которые заполнены запросчиками), но я не могу понять логику.
@ erShoaib Вот последние обновления:
public ActionResult Index()
{
var all = _context.evt.ToList();
return View(all);
}
public ActionResult Details(int? Id)
{
if (Id == 0)
{
return HttpNotFound();
}
var evtt = _context.evt.Find(Id);
return View(evtt);
}
public ActionResult Approve(Events e)
{
if (e==null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Events evt = _context.evt.Find(e.Id);
evt.Finance_Approval = e.Finance_Approval;
//_context.evt.Add(e);
_context.SaveChanges();
return Content("Approved!");
}
Это полный индекс:
@model IEnumerable<InsertFromdifferentControllers.Models.Events>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<table class="table table-bordered table-hover">
@foreach (var item in Model)
{
<tbody>
<tr>
<td>@item.Id</td>
<td>@item.title</td>
<td>@item.amount</td>
<td>@Html.ActionLink("Expand","Details","Finance", new { Id =
@item.Id},null)</td>
</tr>
</tbody>
}
</table>
И это представление для деталей:
@model InsertFromdifferentControllers.Models.Events
<table class="table table-bordered table-hover table-responsive">
<tbody>
<tr>
<td>@Model.Id</td>
<td>@Model.title</td>
<td>@Model.amount</td>
@using (Html.BeginForm("Approve","Finance"))
{
<div class="form-group">
@Html.LabelFor(a=> a.Finance_Approval);
@Html.TextBoxFor(a=> a.Finance_Approval, new { @class="form-control"})
</div>
<button class="btn btn-primary">Save</button>
}
</tr>
</tbody>