【问题标题】:Asp.net MVC GridView edit columns optionAsp.net MVC GridView 编辑列选项
【发布时间】:2011-04-04 20:53:52
【问题描述】:

我有看法:

<%= Html.Grid(Model.data).Columns(column => {
column.For(x => x.results)
    .Action(item => Html.ActionLink(item.results,"Edit").ToString(),
        item => Html.TextBox("result",item.results).ToString(),
        item => (Model.data == item))
       .Named("Results");
             column.For(x => x.refId)
                 .Named("Reference ID");
             column.For(x => x.fileLocation)
                 .Named("File Location");

                })
                .Attributes(style => "width:100%", border => 1)

控制器看起来像:

  public ActionResult Index()
       {
        //  IEnumerable<TranslationResults> results;

        StringSearchResultsModelIndex modelInstance = new StringSearchResultsModelIndex();
        modelInstance.getData();
         return View("SearchGUIString", modelInstance);
      }

数据:

 public class StringSearchResultsModelIndex : IStringSearchResultsModelIndex
{

    private IEnumerable<StringSearchResultModel> m_data;
    private string id;

    public IEnumerable<StringSearchResultModel> getData()
    {

        List<StringSearchResultModel> models = new List<StringSearchResultModel>();
        StringSearchResultModel _sModel = new StringSearchResultModel();
        for (int i = 1; i < 11; i++)
        {
            _sModel = new StringSearchResultModel();
            _sModel.fileLocation = "Location" + i;
            _sModel.refId = "refID" + i;
            _sModel.results = "results" + i;
            models.Add(_sModel);

        }
        m_data = models;
        return models;
    }

    public IEnumerable<StringSearchResultModel> data { get { return m_data; } set { m_data = value; } }
    public string SelectedRowID {get {return id ; } set { id = value; } }

}

当我单击 ActionLink 中的编辑按钮时,我被定向到 /search/Edit 页面,我知道我需要在控制器中为 //search/Edit 提供一些代码,但我没有得到我可以看到的文本框编辑结果单元格中的文本。我是 MVC 的新手,任何人都可以告诉我我应该从这里去哪里,有什么建议吗?

【问题讨论】:

    标签: c# asp.net-mvc-2 gridview mvccontrib mvccontrib-grid


    【解决方案1】:

    这个比较很可能总是返回 false:item =&gt; (Model.data == item)。 这将阻止显示编辑框。

    尝试将比较重写为简单值(例如 id)之间的比较或在您的数据类上实现 Equals 并使用它来代替 ==

    [更新]

    比较用于决定哪些行应在编辑模式下显示,其中true 表示“在编辑模式下渲染行”。

    假设您要编辑与具有给定 ID 的项目相对应的行。然后,您的比较将类似于此item =&gt; item.Id == Model.SelectedRowId

    在你的控制器中你会做这样的事情:

    public ActionResult Edit(string id)
    {
      var model = new StringSearchResultsModelIndex();
      model.getData();
      model.SelectedRowId = id;
      return View("SearchGUIString", model);
    }

    请注意,您需要将SelectedRowId 属性添加到您的视图模型类。

    附带说明,我建议您不要让您的视图模型在 getData() 方法中加载它自己的数据。视图模型应该只是一个容器,用于将数据从控制器传输到视图。将数据放入视图模型是控制器的职责。

    【讨论】:

    • 我怎么知道我在这里检查了什么相等性,Model.data 是具有不同属性的对象类型“搜索”的列表,看起来项目只是一个对象,我如何比较找到哪一个我在那个列表中寻找?我现在完全糊涂了:(。你能解释一下这个 .action 方法以及如何将它与这里的行关联起来吗?
    • @sharma 我已经更新了我的答案。希望这能让事情变得清晰。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多