2017-11-29 15 views
0

一部のHTMLフォームフィールドにリクエストに含まれるデータをあらかじめ入力しようとしています。長いリクエストデータを使用したフォームの事前入力

私の元のセットアップは、すべての変更の前に、次のようになります。

インサイドTicketController:

//GET: Retrieve the form 
[Route("createticket")] 
public ActionResult CreateTicket() 
{ 
    //Irrelevant code ommited 

    return View("CreateTicket"); 
} 

//POST: Submit the form 
[HttpPost] 
[Route("createticket")] 
public ActionResult CreateTicket(CreateTicketModel createTicketModel) 
{ 
    //Irrelevant code ommited (saving the submitted data) 

    return RedirectToAction("ViewTicket", new { ticketId = ticket.TicketId }); 
} 

私はGETパラメータとしてデータを渡すこともできますが、問題は、多くの場合、データです長すぎてURLに含めることができません(2000文字以上)。

私が現在考えることのできる唯一の解決策は、フォームをGETではなくPOSTにすることです。そのため、POSTパラメータを使用してフォームを事前入力することができます。

  • 私は
  • 競合することになる/ createticketパス、2つの可能なPOSTリクエストを持つことになりますそれはちょうど、フォームを取得するために、POSTリクエストを使用する権利を感じていない:私は、このソリューションには二つの問題を持っています

私はこれにどのように対処できますか?

+0

"データがURLに含まれないように長すぎます"とはどういう意味ですか?取得するレコードを決定するためにデータを送信する必要がありますか? Getアクションに必要な余分なデータは表示されません。 公共のActionResult CreateTicket(文字列someDataが){...} その後、私はこのようにデータを送信することもできます:? /createticket someDataが=一部%20Text%で20Etcetera これで問題があることだろう –

+0

がGETは次のようにあるとしデータの長さはURLの最大長によって制限されます。 –

答えて

0

なぜ、CreateTicketモデルをインスタンス化し、事前入力する必要があるデータでプロパティを設定できないのですか?モデルバインディングを使用して、プロパティの値がHTMLフォームフィールドに設定されます。

[Route("createticket")] 
public ActionResult CreateTicket() 
{ 
    //Irrelevant code ommited 
    var data = GetSomeDataYouWantToPrefill(); 
    var model = new CreateTicketModel(data); 

    return View("CreateTicket", model); 
} 

次に、モデルのコンストラクタで、データオブジェクトの値をプロパティに割り当てることができます。 Html.TextboxForメソッドのビューでは、モデル内のプロパティにバインドできます

関連する問題