视图不与模型绑定correcty [英] View not binding correcty with the model

查看:298
本文介绍了视图不与模型绑定correcty的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以找出为什么它不具有约束力。所以我有一个表格,其中一个ListBox是我重装每次我上一个复选框,单击填写列表框的局部视图。

I can figure out why it's not binding. So I have a form where a ListBox is in a partial view which I reload everytime I click on a checkbox to fill the listbox.

我的模型视图,为形式的code是:

The code of my ModelView for the form is :

                            <div class="row-fluid">
                                <div class="span3">
                                     <label>Fonction(s):</label>
                                </div>
                                <div class="span9" id="ListeFonction">                                        
                                    @Html.Partial("ListerFonction", Model)                                 
                                </div>
                            </div>


                            <div class="row-fluid">
                                <div class="span5 offset3">
                                    <div class="fonctions_container">
                                            @foreach (extranetClient.Models.Classes.FonctionContact fonction in ViewBag.Fonctions)
                                            {
                                                string coche = "";
                                                if ((@Model.ListeFonctions).Any(c => c.IdFonction == fonction.IdFonction))
                                                {
                                                    coche = "checked";
                                                }

                                                <input type="checkbox" @coche class="checkbox" value="@fonction.IdFonction" />@fonction.LibelleFonction <br />
                                            }
                                    </div> 
                                </div>
                            </div>

因此​​,大家可以看到,我呈现局部视图仅仅是电子邮件文本框后。在code因为它是:

So as you can see, I render a partial view just after the "Email" Textbox. The code for it is :

@Html.LabelFor(contact => contact.SelectedFonctionIds, "ListeFonctions")
@Html.ListBoxFor(contact => contact.SelectedFonctionIds, new MultiSelectList(Model.ListeFonctions, "IdFonction", "LibelleFonction"), new { disabled = "disabled")

关联到该视图模型看起来像:

The model associated to that view looks like that:

    private List<int> _selectedFonctionIds;
    public List<int> SelectedFonctionIds
    {
        get
        {
            return _selectedFonctionIds ?? new List<int>();
        }
        set
        {
            _selectedFonctionIds = value;
        }
    }

    public List<FonctionContact> ListeFonctions = new List<FonctionContact>();
    public MultiSelectList ListeFonctionsSelectList
    {
        get
        {
            return new MultiSelectList(
                      ListeFonctions,
                      "IdFonction", // dataValueField
                      "LibelleFonction" // dataTextField
            );
        }
    }

    public Contact() { }

    public Contact( List<FonctionContact> listeFonctions, List<int> selectedFonctionIds)
    {
        this.ListeFonctions = listeFonctions;
        this.SelectedFonctionIds = selectedFonctionIds;
    }

    public Contact(int idContact, string nom, string prenom, string email, string telephoneFixe, string telephonePort) {
        this.IdContact = idContact;
        this.Nom = nom;
        this.Prenom = prenom;
        this.Email = email;
        this.TelephoneFixe = telephoneFixe;
        this.TelephonePort = telephonePort;
       }

    public Contact(int idContact, string nom, string prenom, List<int> selectedFonctionIds, List<FonctionContact> listeFonctions, string email, string telephoneFixe, string telephonePort)
    {
        this.IdContact = idContact;
        this.Nom = nom;
        this.Prenom = prenom;
        this.SelectedFonctionIds = selectedFonctionIds;
        this.ListeFonctions = listeFonctions;
        this.Email = email;
        this.TelephoneFixe = telephoneFixe;
        this.TelephonePort = telephonePort;
    }

但局部视图的列表框不与模型结合。我得到好其它信息,但这些并不在列表框中。有人有一个想法?

But the ListBox of the partial view is not binding with the model. I get well the other informations but not these in the listbox. Somebody has an idea ?

推荐答案

你为什么要迫使ListBox的ID在这里:

Why are you forcing the ListBox's id here:

@Html.ListBoxFor(contact => contact.SelectedFonctionIds, 
   new MultiSelectList(Model.ListeFonctions, "IdFonction", "LibelleFonction"), 
   new { disabled = "disabled", **id="idFonctions"** })

ListBoxFor助手应该产生ListBox的ID为你,ID应该是相同的,因为它应该绑定属性。难道不应该是SelectedFonctionIds?

ListBoxFor helper is supposed to generate the ListBox's id for you, and the Id should be the same as the attribute it should bind with. Shouldn't it be SelectedFonctionIds?

当时的绑定工作,你开始使用之前PartialView?因为从previous的问题,我看到你有:

Was the binding working before you started using the PartialView? Because from your previous question, I see that you had:

@Html.ListBoxFor(contact => contact.SelectedFonctionIds, Model.ListeFonctionsSelectList, new { disabled = "disabled" })

在您的视图(即,您没有设置id属性)。

in your View (i.e., you didn't set the id attribute).

这篇关于视图不与模型绑定correcty的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆