У меня есть две таблицы «Пользователи» и «Расходы» в бэкэнде. UserId - это внешний ключ для таблицы расходов. Мне нужно передать UserId из Usercontroller в ExpenseController, чтобы сохранить информацию о расходах против идентификатора пользователя. Но есть две проблемы.
- Я не могу использовать параметр id, который передается контроллеру расходов
- Еще одна форма для создания расходов, я не смог найти ни одного поля userId в
форма, против которой я собираюсь сэкономить. Так что всегда есть modelstate.isvalid == false.
Пожалуйста, посмотрите на следующий код. Надеюсь, ты сможешь мне помочь.
// UserController
public ActionResult Index()
{
return View(db.Users.ToList());
}
// Просмотр Inedx (пользователь)
<%= Html.ActionLink("Expenses", "Index", "Expense", new { id=item.Id}, null)%>
// ExpenseController
public ActionResult Index(int id)
{
ViewData["id"] = id;
return View(db.Expenses.Where(x => x.Users.Id == id).ToList());
}
// индексный вид (расходы)
<%= Html.ActionLink("Create New", "Create", new { id=ViewData["id"]})%>
// Контроллер расходов (Создать)
public ActionResult Create(int id)
{
//ViewData["id"] = id;
return View();
}
// Создать представление
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="ExpenseTitle">ExpenseTitle:</label>
<%= Html.TextBox("ExpenseTitle") %>
<%= Html.ValidationMessage("ExpenseTitle", "*") %>
</p>
<p>
<label for="ExpenseDescription">ExpenseDescription:</label>
<%= Html.TextBox("ExpenseDescription") %>
<%= Html.ValidationMessage("ExpenseDescription", "*") %>
</p>
<p>
<label for="Date">Date:</label>
<%= Html.TextBox("Date") %>
<%= Html.ValidationMessage("Date", "*") %>
</p>
<p>
<label for="Expense">Expense:</label>
<%= Html.TextBox("Expense") %>
<%= Html.ValidationMessage("Expense", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
// Создать сообщение
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
var expense = new Expenses();
try
{
TryUpdateModel(expense, new string[] {"UserId", "ExpenseTitle", "ExpenseDescription", "Date", "Expense" }, collection.ToValueProvider());
if (ModelState.IsValid)
{
db.AddToExpenses(expense);
db.SaveChanges();
return RedirectToAction("Index",int.Parse(collection["UserId"]));
}
else {
return View(expense);
}
}
catch
{
return View(expense);
}
}