我的矩阵实现中的数据太多>>慢,无法提交这么多数据

时间:2012-05-05 09:00:16

标签: asp.net-mvc

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

enter image description here

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

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

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

  2. 当我点击提交时,我收到错误,因为要返回的元素太多。

  3. 我尝试使用更少的数据并且效果更好:在不同的文本框中更快地更改焦点,并且提交工作正常。

    以下是我的控制器操作:

        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对话框中编辑它。你觉得怎么样?

    非常感谢。

1 个答案:

答案 0 :(得分:0)

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

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