我需要一种矩阵来编辑值。这是我到目前为止的结果:
所以我有一个非常大的表(由几个文本框组成)。我仍然需要在标题中添加标题文本,但这只是一个测试。
我的解决方案有2个问题:
当我专注于矩阵中的数字来改变它时,需要时间专注于这些文本框。
当我点击提交时,我收到错误,因为要返回的元素太多。
我尝试使用更少的数据并且效果更好:在不同的文本框中更快地更改焦点,并且提交工作正常。
以下是我的控制器操作:
public ActionResult Index()
{
var dto = _requestServiceClient.GetMatrices();
var vm = new List<MatrixVM>();
var viewModel = new MatrixIndexViewModel();
Mapper.Map(dto, vm);
viewModel.Matrix = vm;
return View(viewModel);
}
[HttpPost]
public ActionResult Index(MatrixIndexViewModel viewModel)
{
return View(viewModel);
}
这是我使用的模型:
public class MatrixIndexViewModel
{
public List<MatrixVM> Matrix { get; set; }
}
public class MatrixVM
{
public int MatrixID { get; set; }
public int OriginStopID { get; set; }
public string OriginStopText { get; set; }
public int DestinationStopID { get; set; }
public string DestinationStopText { get; set; }
public int NumberOfDays { get; set; }
}
以下是我的观点:
@model PLATON.WebUI.Areas.Admin.ViewModels.Matrix.MatrixIndexViewModel
@using PLATON.WebUI.App_LocalResources
@{
Layout = "~/Areas/Admin/Views/Shared/_Layout.Admin.cshtml";
ViewBag.Title = UserResource.Matrix;
double nbrStops = Math.Sqrt(Model.Matrix.Count());
Html.EnableClientValidation(false);
}
@using (Html.BeginForm())
{
for (int count = 0; count < Model.Matrix.Count(); count++)
{
if (count % nbrStops == 0)
{
// Displaying heading text for each lines
@Html.DisplayFor(x => x.Matrix[count].OriginStopText)
}
@Html.HiddenFor(x => x.Matrix[count].MatrixID)
@Html.HiddenFor(x => x.Matrix[count].OriginStopID)
@Html.HiddenFor(x => x.Matrix[count].DestinationStopID)
@Html.TextBoxFor(x => x.Matrix[count].NumberOfDays, new { style = "width:13px" })
if (count % nbrStops == nbrStops - 1)
{
// Proceed next line
@:<br />
}
}
<div class="submit_block">
<input type="submit" class="btn primary" value="Enregistrer" />
</div>
}
您是否了解更好的实施方案?也许更好的想法是拥有一个“只读”矩阵,并能够点击元素在jquery对话框中编辑它。你觉得怎么样?
非常感谢。
答案 0 :(得分:0)
我想我会用<table>
来显示数据,在每个单元格的onclick/onmouseenter
上我会显示一个文本框来接受输入。
您可以考虑打开一个弹出窗口,以便您可以在此时向控制器发布值,或者您可以使用TextBox替换单元格文本,并仅记录隐藏输入列表中更改的值。