2017-04-10 10 views
1

私はFeedbackControllerによって処理されているフィードバックフォームを持つアプリケーションを持っています。Messageという名前のコントローラメソッドのパラメータは禁止されていますか?

@model ClientMessageDto 
... 
...  
    <form class="contact-form form-horizontal" asp-action="Enrol" asp-controller="Feedback" asp-anti-forgery="true"> 
      <div class="col-sm-6 col-sm-offset-3"> 
       <div class="form-group"> 
        <label asp-for="Name"></label> 
        <input asp-for="Name" class="form-control"> 
       </div> 
       <div class="form-group"> 
        <label asp-for="Email"></label> 
        <input asp-for="Email" class="form-control"> 
       </div> 
       <div class="form-group"> 
        <label asp-for="Phone"></label> 
        <input asp-for="Phone" class="form-control"> 
       </div> 
       <div class="form-group"> 
        <label asp-for="Message"></label> 
        <textarea asp-for="Message" class="form-control" rows="2"></textarea> 
       </div> 
       <div class="form-group"> 
        <button type="submit" name="submit" class="btn btn-primary btn-lg pull-right"> 
           Send request 
        </button> 
       </div> 
      </div> 
     </form> 

そして、私はこの方法では、いつも私が[FromForm]属性を使用する場合でも、空のフィールドを持つオブジェクト受け、私のフォーム

Route("enrol")] 
[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<IActionResult> Enrol([FromForm]ClientMessageDto message) 
{ 
    if (ModelState.IsValid) 
    { 
     return RedirectToAction("Index", "Home", new {area = ""}); 
    } 

    return View(clientMessage); 
} 

からDTOを受けるべきコントローラメソッドを持っています。 しかし、パラメータ名をmessage以外のもの(messageDtoやclientMessageなどが正しく動作するもの)に変更すると動作します。

それはOKで、「メッセージ」の単語が禁止されているか、私はバグとして報告すべきか?

+1

問題は、あなたが 'Message'とも呼ばれるフォーム値を持っている可能性があり、それは矛盾しています。 – DavidG

+0

'[(名前、電子メール、電話番号、メッセージ)]] ClientMessageDtoのメッセージは助けますか? – Tseng

+0

@DavidGあなたはそうです。両方のメッセージが矛盾しているようです。それらの名前を変更するとこの問題を解決できます。 – Tannheuser

答えて

0

これはMVCのバグではありません。これは、アクションメソッドが使用しているmessageパラメータとフォームフィールドのMessageの間に競合があるためです。それはデフォルトのモデルバインダーを混乱させます。独自のカスタムモデルバインダーを作成することもできますが、すでに分かっているように、アクションメソッドのパラメータまたはフォームフィールドの名前を変更する方がはるかに簡単です。

関連する問題