18

ASP.NET MVCの一部のテキストには、「ru​​natサーバータグはありません」と記載されていますが、このMSDNの記事でも、そのステートメントのすぐ上にHEAD要素にrunatサーバータグを含むコード例がある場合は次のように述べています。

そしてStackOverflowの会話で私は読んだ

「「runat=server」コントロールを使用するという事実は、従来のASP.NETアプリを実行する必要があることを意味します。

そしてもちろん、Site.Masterページでは、ContentPlaceHoldersにrunatサーバー属性があります。

runatサーバーに関してASP.NETMVCに存在しないのは、各.aspxページ/ビューにあるユビキタスなFORM runat="server"タグだけです。

しかし、ASP.NET MVCの残りのrunatサーバータグについてはどうでしょうか。ASP.NETMVCにこれらがないと言うと、人々はどういう意味ですか?

4

4 に答える 4

7

DIVなどの任意の要素でrunat="server"タグを使用すると、コンパイルされたページでそのコードが別のメソッドとしてレンダリングされます。

「レガシー」コードを変換する場合は、すべてのrunatタグを前もって削除することをお勧めします。そうしないと、次のようなコードでエラーが発生することになります。

<% foreach (var cat in cats) { %>
    <div runat="server">
         <span class="name"> <%= cat.name %> </span> is a
         <span class="breed"> <%= cat.breed %> </span>
    </div>
 <% } %>

'cat'このコードは、範囲外であることについてのいくつかの狂気をあなたに伝えるのに失敗します。最終的に、完全に生成されたコードを見ると、<div>が独自のメソッドとして生成されていることがわかります。これはもちろん、猫が見えない別のスコープです。

MVCアプリケーションのデフォルトテンプレートに少し戻ります。

あなたは現在のテンプレートがあなたにこれを与えるのを見るでしょうhead

<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title><%= Html.Encode(ViewData["Title"]) %></title>
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>

これにより、タイトルをタグに直接書き込むために<%=構文を使用している場合title、なぜそれをrunatにする必要があるのでしょうか。

headコードビハインドがタイトルタグ内の既存の値(ここで出力されたはずです)を探しているのではないかと思ったのですが、<%= Html.Encode(ViewData["Title"]) %>見つかった場合(MVCテンプレートのすべてのサンプルビューに当てはまります)、タイトルが存在しない場合(ViewData ["Title"]がnullまたは空の場合)、デフォルトで、Title属性によってビューで定義されているものになります。

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/RRMaster.Master" 
Title="View Products" AutoEventWireup="true" CodeBehind="ViewProduct.aspx.cs"
Inherits="RR_MVC.Views.Products.ViewProduct" %>

私のマスターページでは、タグを削除していました-ビューのプロパティrunat='server'からページタイトルを入力したいとは思わないので。Titleしかし、私はこの件についてのPhilの約束されたブログ投稿を保留しています-runatサーバーが私のCSSとJSにも役立つものを私に提供する場合に備えて。

于 2009-01-24T11:06:53.890 に答える
2

これらは、runat = "server"を使用できないことを意味するのではなく、通常、MVCでサーバー側のコントロールを使用する必要がないことを意味します。サーバー側のコントロールが必要であり、コードビハインドでそれを操作していることがわかった場合は、アプリケーションがWebフォームに戻ってきていることを示しています。コードビハインドshouloで通常発生するすべての処理が、コントローラーまたはビューロジック自体で処理されるようになりました。

于 2009-01-15T12:29:49.260 に答える
1

このチュートリアルを読んでください:

http://www.asp.net/learn/mvc/tutorial-12-cs.aspx

あなたが必要とすること

<head runat="server">

ビューでページ タイトルを簡単に定義できるようにします。

于 2009-01-15T12:48:33.247 に答える
1

MVC は、Web フォームの上にある単なるレイヤーです。私のカスタム Web フォーム コントロールでは、スクリプト登録のためにサーバー側で head タグにアクセスできるようにする必要もあります。これらのカスタム コントロールはクライアント側でレンダリングされ、viewstate またはサーバー側のイベントを使用しません。このため、MVC で ASPX ビュー エンジンを使用して使用することもできます。

于 2011-12-19T21:12:51.227 に答える