1

我需要一种矩阵来编辑值。到目前为止,这是我的结果:

在此处输入图像描述

所以我有一个非常大的表格(由几个文本框组成)。我仍然需要在标题中添加标题文本,但这只是一个测试。

我的解决方案有两个问题:

  1. 当我专注于矩阵中的数字来改变它时,专注于这些文本框需要时间。

  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 对话框中对其进行编辑。你怎么看?

不管怎么说,还是要谢谢你。

4

1 回答 1

0

我想我会用 a<table>来显示数据,并在onclick/onmouseenter每个单元格上显示一个文本框来接受输入。

您可以考虑打开一个弹出窗口,以便您可以在当时向控制器发布一个值,或者您可以用 TextBox 替换单元格文本并仅在隐藏的输入列表中记录更改的值。

于 2012-05-05T09:35:49.907 回答