• ベストアンサー

【ASP.NET MVC】フォームヘルパーの是非

いつも大変にお世話になっています。 今回も例によってASP.NET MVCの質問です。 ASP.NET MVCでは、Htmlヘルパーを使用してビューを記述するのが常識かと思います。 例) @Html.Textbox("name", Model.name) 今回、デザイナが加わる仕事で、完成後にデザイナ側でフォーム訂正が必要になることが予想されます。 またその際、デザイナから「できるだけ独自仕様(Lazorのこと?)のテンプレートを使用しないように」とのお達しがあったため、苦慮しております。 質問です。 Htmlフォームヘルパーを使わずに、純粋なHTML記述を行った場合、どのような支障が考えられますか? 要件: @Html.Textbox("name", Model.name) と書かずに。 <input type="text" id="name" name="name" /> と(HTML展開後の文法で)書く場合の違いを知りたい です。同じ動作をするのでしょうか?また、違いの程度は? です。なにとぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • onos
  • ベストアンサー率81% (127/155)
回答No.1

ヘルパーといっても結局はHTMLになる、ということをまずは意識してください。 なのでヘルパーを使わずにHTMLを記述した場合、普通に入力した内容を受け取るぶんには問題はでないでしょうね。 ただ、入力内容にエラーがあって、エラーメッセージを表示する必要があったら、、、さあどうします? HTMLしかなかったら、、、どうエラーを埋め込んでいくのか、また入力された内容はどうするのか、とか考えないといけないですね。 ヘルパーを使っている場合はこのあたりをできるだけうまく(プログラムを少なくする形で)フォローしてくれます。 > 今回、デザイナが加わる仕事で、完成後にデザイナ側でフォーム訂正が必要になることが予想されます。 たぶん、ここの考え方が逆です。 まずデザイナ側に先にHTMLを組んでもらいましょう。 プログラム側はできあがったHTMLにヘルパーを組み込むということを考えて作業をすすめていきましょう。 このような形でプログラム側とデザイン側の連携がやりやすいのがMVCの良い点の一つだと思います。

nayutax
質問者

補足

> まずデザイナ側に先にHTMLを組んでもらいましょう。 すいません。書き方が悪かったです。 先にデザイナがHTMLを組むのですが、その内容が変更されたり、フォームが追加になったりする予定で、その過程でRazorが敬遠されています。 (aspx系統のヘルパーも止めてくれと言われています) エラー表示や値表示以外には、何か支障は出るでしょうか?

その他の回答 (1)

  • onos
  • ベストアンサー率81% (127/155)
回答No.2

ヘルパー使わないと、、、どうかな。 エラーや値表示の件で作業工数が増えるだろうことは予測できます。 あと、全体の統一感をだすのに、、、なんだっけ、WebFormでいうマスターページみたいな仕組みがありますがそういうのも使えませんね。 動的なものでなければ問題ないでしょうけど、、、そしたらMVC使う意味なんてないし。 内容変更のときとかフォーム追加のときとかも、デザイナにcshtml渡す必要とかなくて、デザイナが作成したHTMLもらってそれに合わせて修正だけすればいいと思うんですが。 それじゃだめなんでしょか。

nayutax
質問者

お礼

onos様、何度もありがとうございます。 もうこの件は完全なデザイン先行で、自分ではどうすることもできません。 HTMLヘルパーは極力使わない、という規約です。 @Layoutも、@Url.Contentも、@Html.TextboxもすべてNGということです。 内容変更は随時、デザイン側がcshtmlをダイレクトに直すということで、そのため、Dreamweaver等でプレビューが崩れない環境にしてほしいということです。 今回はありがとうございました。 ご意見によれば、フォーム検証に問題が出そうなので、jQuery.Validationや、jQuery.Formを勉強します。 でも、ASP.NET MVCに限らず、Symphonyなどのフレームワークでも、確かにビジュアルエディタのことは何も考えられていないので、凝ったフォームになってくるとデザイン修正が難しい面はあります。 そういうデザイナさんの立場も多少はわかるのですが。。

関連するQ&A

  • 【ASP.NET MVC】HTMLヘルパーについて

    ASP.NET MVCで開発しています。 型付けHTMLヘルパーが上手く理解(というか納得?)できないので どうかご教授願います。 ところで、事前にこちらのページを覗いております。 http://www.atmarkit.co.jp/fdotnet/scottgublog/20100113stronghelper/stronghelper.html さて、本題。 <%= Html.TextBoxFor(model => model.ProductName) %> というのが、 <input type="text" id="ProductName" name="ProductName" value="*model.ProductNameの値*"/> となるのは何となく理解ができます。 理解できるということの根拠として、id(およびname)の「ProductName」はまさに 記述されていますし、ラムダ式はmodel.ProductNameを返すようになっているから、 「.NETはnameとidとvalueを取得できるんだろうよ」、と予想できるからです。 旧来のHtmlヘルパー <%= Html.Textbox("ProductName",Model.ProductName) %> に比べて、 「name(id)属性用のパラメータが必要無い」 「テンプレート内でのコードインテリセンスが効く」 という利点があるそうですが、どうしてもここで納得出来ないことがあります。 この2点の利点を実現するのに、なぜラムダ式で実現できるのでしょうか? あるいは、なぜラムダ式が採用されたのでしょうか? 別の言い方をすれば、別にラムダ式を用いなくても、.NETが賢くなれば、 <%= Html.Textbox(Model.ProductName) %> という記述で、インテリセンスが効いてコンパイルチェックも実行されても おかしく無いと思うのですが・・・。 Modelオブジェクトの型宣言はテンプレートの先頭で行われているはずですから、 「Model.」と打ったところでModelのクラスと関連付いてもおかしく無いですよね? 別にMSの仕様に文句をつけるつもりはないのですが、 「先述の2点の利点を実現する」ことと、「ラムダ式の記述」というのがどうも一致しません。 開発作業には支障ないのですが、腑に落ちなくて困っています。 ソースコードを読んでも、自分の疑問の解決には至りませんでした。 どうぞよろしくお願い致します。

  • 【ASP.NET MVC】モデルの作り方

    ASP.NET MVCでのモデルについて、皆様はどのように作成しておられますか? ASP.NET MVCで何本かWebシステムを構築して、いまだに試行錯誤です。 サンプル例を見ても、実際とはかけ離れた簡単な内容で、あまり参考になりません。 自分が見たいくつかのサイトではこのように書いてありました。 ドメインモデル データベースと1:1で存在する入出力用のモデル。EntityFrameworkで定義する。 拡張ドメインモデル ドメインモデルにプロパティを追加したり、複数のモデルを使いやすくまとめたモデル。 ビューモデル 画面表示するためのモデル。 フォームモデル フォーム入力値を受信するためのモデル。 理屈はわかるのですが、このように4種類もモデルを定義するものなのでしょうか? モデル間のデータのやりとりも大変ですし、定義だけで作業量が半端ない感じです。 継承などをうまく使って省力化する方法とかありますか? 皆さまの方法論をお聞きしたくお願い申し上げます。 ASP.NET MVCに限らず、CakePHPなどの例でも歓迎です。

  • 【ASP.NET MVC】HTMLヘルパーについて

    VisualStudio2010 ASP.NET MVC4.0で開発しています。 検索条件を入力欄から入力し絞り込みさせ、結果を表示する照会画面を作成しています。 ある理由から「入力欄の値をPostで受け取りController内でその値を書き換えさせ、 Viewに戻り、書き換わった状態で入力欄を表示させたい」という事をしたいのですが、 ラムダ式で行うと書き換えが無効になり入力値のままになってしまいます。 @Html.TextBoxFor(model => model.Crdate,) 以下で表現するとキチンとController内の書き換えが有効になって表示されます。 @Html.TextBox("Crdate", Model.Crdate) 解析してみたところTextBoxForの第一引数HtmlHelperの htmlHelper.ViewData.ModelState.Valuesが入力状態を持っていて それがある場合に優先されているのかな?という憶測が立っています。 (初期表示の時点のhtmlHelper(htmlHelper.ViewData.ModelStateにKeyがない状態)をセッションに保存させPost後、画面で表示する際にセッションから上書きしてやるとちゃんと値が変わったため) バリデーションチェックの関係上出来ればラムダ式のHelperForの形でやりたいのですが、 方法がありますでしょうか? よろしくお願いいたします。

  • 【ASP.NET MVC】一覧編集画面

    いつもお世話になります。 ASP.NET MVCを使って構築中のサイトで、また暗礁に乗り上げております。 商品一覧の画面で、一覧表示のままCRUD(追加・更新・削除)するインターフェースを客先から求められております。 一覧表示 → 個別画面でのCRUDはできていますが、画面遷移が面倒ということで却下されました。 ASP.NETでいう、GridViewのようなテイストです。 (各行にテキストボックス・更新ボタン・削除ボタン) モデルはこんな感じです(簡略化してあります。実際にはご教示いただいたカスタム検証もあります) public class Lady {  public int ID { get; set; }  public string name { get; set; }  public int areaID { get; set; }  public int salesAmount { get; set; } } public List<Lady> ladies; 一覧表部分のビューはこんな感じです(細かい点は省略です) @foreach (var lady in Model.ladies){  @using(Html.BeginForm("UpdateLady","Admin")) {   @Html.Hidden("ID", lady.ID)   @Html.TextBox("name", lady.name)   @Html.DropDownList("areaID", new SelectList(model.areas, "areaID","areaName", lady.areaID))   @Html.TextBox("salesAmount",lady.salesAmount)   <!-- 以降不明 -->   <input type="submit" value="更新"/>   <input type="submit" value="削除"/>  } } コントローラ class AdminController {  public EditLady(){   var model = new EditLadyView();   return View("EditLady", model);  }  [HttpPost]  public UpdateLady(Lady lady){   if (ModelState.IsValid){    // 更新    // lady.IDをキーにしてDBを更新   } else {    // 再表示 <!-- ここがわからない -->   }  }  [HttpPost]  public DeleteLady(int ID){   // 削除   // IDをキーにしてDBを削除  } } 質問点は以下の通りです。 ■表示はOKですが、できたhtmlを見ると、各行の項目が同じid / name名になります。これで正しいですか? ■同じForm内に更新ボタンが複数あった場合、formのPOST先を変える必要がありますが、javascriptを使うのでしょうか? ■検証失敗時、全体を再表示するにはどういった方法があるでしょうか? 読み直すと入力した値が消えてしまいます。 会社にMVCの経験者がおらず、苦労しています。 なにとぞお助けください。

  • フォーム内の値の指定方法

    JavaScriptで、 フォーム内の値を指定するとき、どちらの記述がwebの標準として正しいのでしょうか? document.form1.aaa.value form1.aaa.value  【フォーム】 <from name="form1"> <input type="textbox" name="aaa"> </form>

  • SmartyとMVCフレームワークに関して

    殆どMVCフレームワークを使用したことがなく 今更ながら覚えようかと思っています。 MVCフレームワークはCakePHPかCodeIgniterどちらか悩んでおり モデル設計が殆ど必要ない分CodeIgniterがいい気がしていますが 実際のところどちらのフレームワークとSmartyを使用するのがいいのでしょうか? 今回は小規模~中規模のサイトの予定なので簡単に導入取得ができるものが希望です。 CodeIgniter+Smartyの場合、導入方法のサイトが古いものばかり(新しい記事もあるが違う方法)で 最近の最も使われている手法が分かりません・・・ 経験者の方などのご教示お願いします。 CodeIgniterのライセンスが変わったとかで日本サイトの更新が停止しているようなので将来性のことも含めてご回答お願いします>< *導入方法などもご教示いただけましたらお手数とは思いますがよろしくお願いいたします><

    • ベストアンサー
    • PHP
  • メールフォームのCGIプログラムがうまく動作しなくなりました。

    氏名や住所・質問項目を入力しWebフォームから送信して、メールで受信するようなメールフォームページを作っていますが、 メールフォームの項目をテキスト形式(自由記述形式)からプルダウン選択式に変更したところ、メールフォームが正常に動作しなくなりました。 フォームは、以下のように変更しました。 <textarea name="内容"> 自由記述欄  ↓ <select name="course"> 選択式 メールフォームの項目(html)を変更した場合、 それに対応したCGIプログラムも修正する必要があるのでしょうか。 Htmlのメール項目が、どこのCGIに関連しているのかが いまいちわかりません。 素人のため、アバウトな表現になってしまい 申し訳ありませんが、とても困っていますので 教えて頂ければと思います。

    • 締切済み
    • CSS
  • フォームの表示が消えてしまう・・・

    初歩的なことでつまづいております。 フォームを利用して「入力」フォームに文字を入れ、「入力!」ボタンを押すと「結果」フォームにその文字を表示させたいのですがうまくいきません。 やりたいことは、 1.「入力」フォームに文字を入れます(たとえば"123") 2.「入力!」ボタンを押します 3.すると「結果」フォームに"123"と表示させたいです  4.また、「入力」フォームにはそのまま"123"が表示されたままにしたいです なぜか下記の記述だとボタンを押した瞬間にすべてのフォームの文字表示が消えてしまいます。 これはどうしてなのでしょうか?すみませんがよろしくお願いします。 <HTML> <HEAD> <TITLE></TITLE> <SCRIPT LANGUAGE="JavaScript"><!-- function calcButton() { var inputValue = document.calc.input.value; document.calc.result.value = inputValue; } //--></SCRIPT> </HEAD> <BODY> <FORM name="calc" action=""> 入力<INPUT type="text" size="5" name="input"><BR> 結果<INPUT type="text" size="5" name="result"><BR> <INPUT type="submit" value="入力!" onClick="calcButton()"> </FORM> </BODY></HTML>

  • 携帯用CGIフォームの修正(戻る)ボタンについて

    無料で配布されたCGIで携帯用のメールフォームを作っています。 フォームに入力後〔確認画面へ進む〕ボタンを押してエラーがあればフォームに自動で戻しエラー表示をしています。(入力内容を維持したまま戻されます) ここまではテンプレートでできました。 しかし、送信前の確認画面で、内容を修正するためのボタンがありません。 3つ作ったフォームの内の2つは携帯の戻るボタンで内容を維持したまま戻れたのですが、スクロールをしなければならない程縦長のフォームだけ、どういう訳か携帯の戻るボタンを押しても入力フォームに戻れないです。スクロールの上の方に上がるだけです。 そこで、確認画面に内容を修正するためのボタンを設置しようと考えているのですが、どのような記述をすれば良いのでしょうか? ※内容は維持したまま修正したいです。 確認画面のソースにはこのような記述があったのですがこれが関係していますでしょうか。 <!-- TMPL_LOOP NAME=loop_list --> <input type="hidden" name="<!-- TMPL_VAR NAME=key ESCAPE=HTML -->" value="<!-- TMPL_VAR NAME=value ESCAPE=HTML -->"> <!-- /TMPL_LOOP --> 大変お手数ですが教えていただけると助かります。 宜しくお願い致します。

    • ベストアンサー
    • CGI
  • outlookでのフォーム送信ができません

    どなたか教えていただけませんか? 現在、mailtoを使用してのフォーム送信ページを作成しているのですが どうも、windows XP の Internet Explorer6 の OutlookExpress での送信ができません。 Beckyなどでは普通に送信できるのですが、 outlookでは、ただメーラーが立ち上がるだけで フォームの内容をもう一度、記入しなくてはいけないという2度手間な状況です。 何か、HTML記述に加えなければいけないのでしょうか? 現状のformタグはこのようになっております。 <form name="form1" method="post" action="mailto:***@***.co.jp" enctype="text/plain" onSubmit="return chk()"> よろしくお願いします。