MVC3是否可以从控制器动作提供视图部分?

时间:2011-05-27 17:30:27

标签: asp.net-mvc-3 routing

假设我有index.cshtml

@{
    ViewBag.Title = "Index";
}
@model SomeModel

@section JS{     
    content1
    content2
    content3
}

<div> View Content </div>

我有没有办法让控制器操作只为JS部门提供index.js的请求?

导航到http://somesite/index.js会返回

    content1
    content2
    content3

编辑:对此有一些进一步的想法。我的目标是创建一个以编程方式需要JS部分的布局页面,然后将View组合到该布局页面,然后返回此结果。

Psuedo代码示例:

var layout = new LayoutPage();
layout.DefineSection("JS", required: true);
layout.Compose(View("index"))
return layout;

我没有按照我的描述实现这一点,但我觉得这可能会提供更多关于我想要达到的目标。

2 个答案:

答案 0 :(得分:1)

你可以做这样的事情(但是你必须编写自己的控制器动作来正确地做到这一点)

Index.cshml

@model MvcApplication1.Models.TestModel
@{
    ViewBag.Title = "Home Page";
}

<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>

@section JS {
    blahblahblah
}

JSLayout:

@RenderSection("JS")

您的控制器操作

public ActionResult Index() {
    return View("Index", "_JSLayout", yourModel);
}

这将仅输出JS部分。如果你想以编程方式进行,那么需要一点时间。

答案 1 :(得分:0)

唯一的方法是将该部分的内容变为局部视图,并从控制器动作返回部分视图。