首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绑定OrderedDictionary?

如何绑定OrderedDictionary?
EN

Stack Overflow用户
提问于 2013-01-26 20:55:41
回答 2查看 439关注 0票数 0

我尝试将OrderedDictionary绑定到视图,但是当调用post方法时,字典总是空的。

下面是我的代码:

代码语言:javascript
复制
    [HttpGet]
    public ViewResult Edit(string username, string password)
    {
        Xml test = new Xml(@"c:\Users\pc\Desktop\xml - Copy.xml");
        XmlNode userNode = test.GetUserNodeByUsernameAndPassword(username, password);
        User user = new User();
        user.BindData(userNode);
        return View(user.user);
    }

    [HttpPost]
    public ViewResult Edit(OrderedDictionary attributes)
    {
        return View(attributes);
    }

下面是视图:

代码语言:javascript
复制
@using (Html.BeginForm("Edit", "Users")) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>User</legend>

    <p>
        <input type="submit" value="Save" />
    </p>

    @{int counter = 0;}
    @{string name = "";}
    @foreach (DictionaryEntry attribute in Model)
    {
        { name = "[" + counter + "].key"; }
        <input type="hidden" name=@name value=@attribute.Key />
        @attribute.Key @Html.TextBoxFor(m => attribute.Value)
        counter++;
        <br />
    }
</fieldset>
}

结果Html看起来像这样:

代码语言:javascript
复制
<input type="hidden" value="Username" name="[0].key">
  Username
  <input id="attribute_Value" type="text" value="Anamana" name="attribute.Value">

因此,OrderedDictionary的内容在视图中看起来很好,但是当我回发post时,绑定不起作用,目录仍然是空的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-30 02:49:19

与此同时,我找到了解决方案。

我可以将OrderedDictionary传递给视图页面。它通过以下Razor代码对其进行处理:

代码语言:javascript
复制
    @model System.Collections.Specialized.OrderedDictionary
    (...)
    @{int counter = 0;}
    @{string name = "";}
    @foreach (DictionaryEntry attribute in Model)
    {
        { name = "[" + counter + "].key"; }
        @Html.Hidden(name, attribute.Key)
        {name = "[" + counter + "].value";}
        @attribute.Key @Html.TextBox(name, attribute.Value)
        counter++;
        <br />
    }

结果HTML的结构适合在书中找到的样本,字典中的值在页面上显示良好。

调用POST后,POST处理程序函数将在Dictionary中获取修改后的值。

代码语言:javascript
复制
    [HttpPost]
    public ViewResult Edit(Dictionary<string, string> attributes)
    {}

我不知道为什么,但我不能在这里使用OrderedDictionary

票数 0
EN

Stack Overflow用户

发布于 2013-01-26 23:43:47

概念

要绑定字典,必须更改html input标记中的name属性。如下所示:

在您的控制器中:

代码语言:javascript
复制
[HttpPost]
public ActionResult Edit(IDictionary<string, string> attributes) 
{  
}

在您的HTML中:

代码语言:javascript
复制
<input type="text" name="attributes[0].Key" value="A Key" />
<input type="text" name="attributes[0].Value" value="A Value" />

<input type="text" name="attributes[1].Key" value="B Key" />
<input type="text" name="attributes[1].Value" value="B Value" />

attributes名称应该在[0]属性的索引名称之前,因为您的操作需要它。

提示

我将使用Asp.Net MVC的HiddenForTextBoxFor HTML Helper。

代码语言:javascript
复制
@Html.HiddenFor(model => model[i].Key)
@Html.TextBoxFor(model => model[i].Value)

它将以asp.net mvc能够理解的格式呈现,并使其正常工作。

有关数据库绑定的更多示例,请查看this link

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14537126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档