2

asp.net mvc 3でajaxを使用せずに、特定のdivで部分ビューをレンダリングする方法???

たとえば、私はモデルを持っています:

public class TestViewModel
{
    public string FullText
    {
        get
        {
            retrun "Full text";
        }
    }
    public string ShortText
    {
        get
        {
            return "Short text";
        }
    }
}

メインビュー:

@model TestViewModel
   ...      
    <div id="RenderHere">

    </div>
    @Html.ActionLink("Show short text");
    @Html.ActionLink("Show full text");
   ...

そして2つの部分的なビュー:

ShortTextParial

@model TestViewModel
@Html.LabelFor(m => m.ShortText);
@Model.ShortText;

およびFullTextPartial

@model TestViewModel
@Html.LabelFor(m => m.FullText);
@Model.FullText;

たとえば、ajaxを使用せずに「Showshorttext」actionlinkを指定した後、「RenderHere」divでShortTextPartialをレンダリングするにはどうすればよいですか?私はすでにそのような解決策を見つけましたが、それらは私には合いません。

PSクライアント側でJavaスクリプトが無効になっているとページが正しく機能しないため、Ajaxを使用したくありません。

4

2 に答える 2

2

まず第一に、私はあなたのデザインが最高だとは思わないと言わざるを得ません。ほとんどのロジック、比較、および条件は、ビューとコントローラーではなく、モデルとビジネスロジック層で実行する必要があることに注意してください。

とにかく、AJAXを使用したくない場合は、URLパラメーターまたはセッション状態を使用してページ間でデータを渡す必要があります。そうは言っても、URLパラメータで開発しました。

(私の開発環境はVS2010 SP1、ASP.NET 4、MVC 3です)

まず、TextViewModelを次のように変更する必要があります。

public class TextViewModel
{
    public string FullText { get { return "Full text"; } }
    public string ShortText { get { return "Short text"; } }

    public string ViewMode { get; private set; }

    public TextViewModel(string viewMode)
    {
        if (!string.IsNullOrWhiteSpace(viewMode))
            this.ViewMode = viewMode.Trim().ToLower();
    }
}

ここで、コントローラーを少し調整します。

public class HomeController : Controller
{
    public ActionResult Index(string id)
    {
        Models.TextViewModel model = new Models.TextViewModel(id);
        return View(model);
    }
}

そして最後に私たちの見解:

@model MvcApplication1.Models.TextViewModel
@{
    ViewBag.Title = "Index";
}
<h2>
    Index</h2>
<div id="RenderHere">
    @if (Model.ViewMode == "short")
    {
        @Html.Partial("ShortTextParial", Model)
    }
    @if (Model.ViewMode == "full")
    {
        @Html.Partial("FullTextPartial", Model)
    }
</div>
@Html.ActionLink("Show short text", "Index", new { id = "short" })
@Html.ActionLink("Show full text", "Index", new { id = "full" })

このアプリケーションは私のコンピューターでうまく機能します。必要に応じて、ここにコードをアップロードしました:http: //goo.gl/9v2Ny

@if繰り返しになりますが、ビューやコントローラーでさえも必要としない、より優れたデザインを思い付くことができると言いたいです。

于 2012-06-15T21:21:28.110 に答える
0

本当にajaxを使用してより多くのデータを表示したくない場合は、両方のコンテンツを別々のdivにロードして、ビュー全体を非表示にすることができます。ユーザーが[もっと見る]リンクをクリックしたら、それを表示するだけです。

本当にやりたいですか?すべてのユーザーが[もっと見る]リンクをクリックするわけではないことに注意してください。それでも、ユーザーのコンテンツをロードして非表示にします。なぜそうする必要があり、ページサイズを大きくする必要があるのですか?可能であれば、データを「オンデマンド」にするためにajaxソリューションを使用します。

于 2012-05-28T00:21:29.917 に答える