2011-12-09 22 views
0

MVC3フォーム上に同じ値を表す必要がある2つのフィールドがあります。更新されている場合は、もう一方を更新して正しい値を表示する必要があります。明らかな理由がある場合、フィールド(ページ上の2番目のフィールド)は正しく更新されません。私が必要とするものを達成する方法はありますか?MVCフォーム上の2つの場所で同じプロパティを更新する

第1実施例

<li class="identifier-controls"   @Model.IdentifierConfigurator.GenerateDataAttributes("ssn")> 
     @Html.TextFieldFor("Social Security Number", m => m.SocialSecurityNumber).SSN() 
    </li> 

may appear twice on that form (In two different spots). (At this point, both of the controls have the same ID and name) 

OR:

第2例

<li class="identifier-controls"   @Model.IdentifierConfigurator.GenerateDataAttributes("ssn")> 
     @Html.TextFieldFor("Social Security Number", m => m.SocialSecurityNumber).SSN() 
    </li> 

と例えば

<li class="identifier-controls"   @Model.IdentifierConfigurator.GenerateDataAttributes("ssn")> 
     @Html.TextFieldFor("Social Security Number", m => m.Person.Description.SSN).SSN() 
    </li> 

がフォームに表示されます。この時点で、IDは入力とは異なりますが、IDはそのIDでのみ更新されます。ここ

が生成されるHTMLである:

<ol class="field-list display"> 

    <li id="party-name"><span class="label">Name</span><span id="FormalDisplayName" class="value" style="width:140px">Guy, Bad</span></li> 

    <li><span class="label">Aliases</span><span id="AliasNames" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Status</span><span id="PartyStatusName" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Gender</span><span id="Description_Gender" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Juvenile</span><span id="Description_IsJuvenile" class="value" style="width:140px">No</span></li> 

    <li><span class="label">Ethnicity</span><span id="Description_Ethnicity" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Residential Status</span><span id="Description_ResidentialStatus" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Marital Status</span><span id="Description_MaritalStatus" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Religion</span><span id="Description_Religion" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Citizenship</span><span id="Description_Citizenship" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Birth City</span><span id="Description_BirthCity" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Date of Birth</span><span id="Description_BirthDate" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Date of Death</span><span id="Description_DeathDate" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Est. Age at Incident</span><span id="Description_EstimatedAgeAtIncident" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Adoption Date</span><span id="Description_AdoptionDate" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Multiple Birth</span><span id="Description_MultipleBirthName" class="notentered" style="width:140px">Not entered</span></li> 

    <li><span class="label">Email</span><span id="Description_Email" class="notentered" style="width:140px">Not entered</span></li> 



    <li><span class="label">Identifiers</span><span id="SuspectIdentifiersDisplay" class="value" style="width:400px">Prof<span class='value-display'>&nbsp;123</span><span class='separator'>&nbsp;|&nbsp;</span>FBI<span class='value-display'>&nbsp;123</span><span class='separator'>&nbsp;|&nbsp;</span>SSN<span class='value-display'>&nbsp;222-22-2222</span><span class='separator'>&nbsp;|&nbsp;</span>ITN<span class='value-display'>&nbsp;123</span><span class='separator'>&nbsp;|&nbsp;</span>BCI<span class='value-display'>&nbsp;13</span><span class='separator'>&nbsp;|&nbsp;</span>ID<span class='value-display'>&nbsp;123</span><span class='separator'>&nbsp;|&nbsp;</span>DL<span class='value-display'>&nbsp;123</span><span class='separator'>&nbsp;|&nbsp;</span></span></li> 

</ol> 

このHTML(これは、例えば2〜HTMLで)と第1の例で生成されたHTMLとの間の唯一の違いは、2つのコントロールが持っていることです同じIDと名前。

公共のActionResult更新(int型のPartyId、FormCollectionデータ) { するvarパーティ= Party.Find(のPartyId).OrNotFound(:ここに呼ばれたときに提出BeginRouteForm HTMLヘルパーによって呼び出されるコントローラのメソッドで何が起こるかであります); var vm = new PartyEditViewModel(party.Case、party);

try 
    { 
    UpdateModel(vm, data); 

    return JsView("Update.js", party); 
    } 
    catch (UpdateModelException) 
    { 
    return JsView("Edit.js", vm); 
    } 
} 
+0

ページが読み込まれたときに生成されるhtmlも投稿できますか?さらに、フォームが提出された後に変更が発生するのを探しているのですか、または1つのテキストフィールドを編集すると他の変更も同様に動的なものを探していますか?あなたの要件を理解していない場合は、私を修正してください。 – mreyeros

+0

フォームが送信された後に変更する値を探しているだけです。私たちのアプリでは、フォームが送信されると処理が行われ、ユーザーは更新されたフォームの値を読み取り専用として表示する詳細ページに移動します。編集ボタンを再度クリックすると、フォーム上の上記の両方のコントロールに同じ値が含まれている必要があります。これは、更新されるフィールドに関係なく発生します。 –

+0

あなたのコントローラーアクションで、更新を処理するポストアクションにどのパラメーターを送信していますか? – mreyeros

答えて

1

OK、それは問題がHtml.TextFieldForへのあなたの呼び出しがにモデルプロパティを区切るためにバインドされ、同じ名前とIDを持つ2つのコントロールを作成することができるということである原因になっているもののように見えます。このような場合は、コントロールのIDと名前の前に正しく接頭辞を付ける必要があります。そのため、モデルのバインドが開始されると、モデルのプロパティに対して正しく値がバインドされます。

+0

それは私が言っているとおりです。 –

+1

私はそれを理解したと思います。この問題は、同じ名前/ IDのフィールドが2つあることに関連しています(前述のとおり)。編集ボタンがクリックされたときに値が入力されるため、その値を含む最初のコントロールは、更新に使用する値になります。したがって、表示される最初のコントロールの値を変更すると、更新が完全に機能し、変更に気付くでしょう。 2番目のコントロールが更新されても、最初のコントロールには古い値が残っており、それが値であるため、更新が通知されません。ありがとう! –

+1

あなたはそれを把握できたことをうれしく思います。 – mreyeros

関連する問題