Нужен совет по подходу. Я разработал представление, используя структуру таблицы, чтобы получить необходимый мне макет, и заполнить эту таблицу контуром foreach на основе моего ViewModel.MVC Передача значений контроллеру
Я по существу хочу, чтобы пользователь мог обновлять некоторые поля, например noofusers и т. Д., И я хочу иметь кнопку addotcart, которая передаст эти значения контроллеру.
Проблема, которую я имею в настоящее время, это значения, которые не передаются формой, поскольку они существуют вне формы.
Если я вставляю значения в форму, я теряю любое форматирование, которое получаю от таблицы.
Если я повторить значения внутри формы, но изменить, чтобы скрытые за, я получаю значение от модели прошла в не обновленных значениях
Я искал другие должности и иметь другую должность здесь, где предложил не использовать foreach и использовать цикл for вместо этого, но это ничего не меняет по отношению к проблеме, которую я испытываю выше.
Код показан ниже - любые предложения по общему подходу для достижения простой формы с красивой компоновкой и по-прежнему смогут передавать значения контроллеру через форму, будут оценены.
@model PagedList.IPagedList<ShoppingCartCatalogue>
@using Mojito.Domain.ViewModels
@using PagedList.Mvc;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Mojito Products</h2>
<div class="col-md-9"></div>
<div class="col-md-3">
@using (Html.BeginForm("Index", "MojitoProducts", FormMethod.Get))
{
<p>
@Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
<input type="submit" value="Search" />
</p>
}
</div>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().ImageData)
</th>
<th>
@Html.ActionLink("Category", "Index", new { sortOrder = ViewBag.SortByCategory, currentFilter = ViewBag.CurrentFilter })
</th>
<th>
@Html.ActionLink("Product", "Index", new { sortOrder = ViewBag.SortByProduct, currentFilter = ViewBag.CurrentFilter })
</th>
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().Description)
</th>
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().TypeOfSubscription)
</th>
<th>
@Html.ActionLink("Price per user", "Index", new { sortOrder = ViewBag.SortByPrice, currentFilter = ViewBag.CurrentFilter })
</th>
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().NoOfUsers)
</th>
<th>
@Html.DisplayNameFor(model => model.FirstOrDefault().TotalPrice)
</th>
</tr>
@foreach (ShoppingCartCatalogue t in Model)
{
<tr>
<td>
@if (t.ImageData != null)
{
<div class="pull-left" style="margin-right: 10px">
<img class="img-thumbnail" width="75" height="75"
src="@Url.Action("GetImage", "MojitoProducts",
new { t.MojitoProductId })" />
</div>
}
</td>
<td>
@Html.DisplayFor(modelItem => t.Category, new { Name = "Category", id = "Category" })
</td>
<td>
@Html.DisplayFor(modelItem => t.Name, new { Name = "Name", id = "Name" })
</td>
<td>
@Html.DisplayFor(modelItem => t.Description, new { Name = "Description", id = "Description" })
</td>
<td>
@Html.EnumDropDownListFor(modelItem => t.TypeOfSubscription, new { Name = "TypeOfSubscription", id = "TypeOfSubscription" })
</td>
<td>
@Html.DisplayFor(modelItem => t.Price, new { Name = "Price", id = "Price" })
</td>
<td>
@Html.TextBoxFor(modelItem => t.NoOfUsers, new { Name = "NoOfUsers", id = "NoOfUsers", type = "number", min = "1" })
</td>
<td>
@if (t.TypeOfSubscription.ToString() == "Annual")
{
t.TotalPrice = t.Price * 12;
}
else
{
t.TotalPrice = t.Price;
}
@Html.DisplayFor(modelItem => t.TotalPrice, new { Name = "Total Price", id = "Total Price" })
</td>
<td>
@using (Html.BeginForm("AddToCart", "ShoppingCart", FormMethod.Post))
{
<div class="pull-right form-group">
@if (Request.Url != null)
{
@Html.HiddenFor(modelItem => t.TypeOfSubscription, new { Name = "TypeOfSubscription", id = "TypeOfSubscription" })
@Html.HiddenFor(modelItem => t.NoOfUsers, new { Name = "NoOfUsers", id = "NoOfUsers" })
@Html.HiddenFor(modelItem => t.MojitoProductId, new { Name = "MojitoProductId", id = "MojitoProductId" })
@Html.HiddenFor(modelItem => t.Category, new { Name = "Category", id = "Category" })
@Html.HiddenFor(modelItem => t.Name, new { Name = "Name", id = "Name" })
@Html.HiddenFor(modelItem => t.Description, new { Name = "Description", id = "Description" })
@Html.HiddenFor(modelItem => t.Price, new { Name = "Price", id = "Price" })
if (t.TypeOfSubscription.ToString() == "Annual")
{
t.TotalPrice = t.Price * 12;
}
else
{
t.TotalPrice = t.Price;
}
@Html.HiddenFor(modelItem => t.TotalPrice, new { Name = "Total Price", id = "Total Price" })
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)
<input type="submit" class="btn btn-success" value="Add to cart" />
}
</div>
}
</td>
</tr>
}
</table>
<div class="col-md-12">
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
</div>
@Html.PagedListPager(Model, page => Url.Action("Index",
new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))
Положить таблицу в форму? – Mark
Я пробовал это, но все поля просто отображаются рядом друг с другом, кажется, что формат таблицы не применяется в форме. – ccocker
Тогда это проблема css, а не проблема mvc. Сравните css, который применяется к таблице вне формы, при этом css применяется к таблице внутри формы. Вероятно, это просто вопрос добавления класса к таблице и вашего файла css. – Mark