我正在尝试使用Handlebars.js作为服务器模板引擎,使用Node.js | Express创建一个简单的HelloWorld项目.
问题是我找不到任何使用这种链的例子,尤其是多视图.
例如,我想定义标题视图:
<header>
<span>Hello: {{username}}</span>
</header>
Run Code Online (Sandbox Code Playgroud)
并在每个页面中使用它与其他视图.
也许我正在以错误的方式思考这些观点,我认为该观点是一种控制,我可以在任何其他视图中的任何页面上重用.
我感谢任何链接到教程或(更好)我可以从中学习的开源项目.
我编写了自定义VirtualFile和VirtualPathProvider实现,这些实现成功获取了部分视图的嵌入式资源.
但是,当我尝试渲染它们时会产生此错误:
The view at '~/Succeed.Web/Succeed.Web.Controls.SImporter._SImporter.cshtml' must derive from WebViewPage, or WebViewPage<TModel>.
渲染局部视图时,在常规视图内部,它看起来如下所示:
Html.RenderPartial("~/Succeed.Web/Succeed.Web.Controls.SImporter._SImporter.cshtml");
Run Code Online (Sandbox Code Playgroud)
是什么让它相信这不是局部观点?
编辑:我为虚拟文件和虚拟文件提供程序实现发布了我的代码,任何人偶然发现这个寻找解决方案来获得该组件的工作.这个问题也适用于基于问题标题的人.
ere是VirtualFile实现以供参考:
public class SVirtualFile : VirtualFile
{
private string m_path;
public SVirtualFile(string virtualPath)
: base(virtualPath)
{
m_path = VirtualPathUtility.ToAppRelative(virtualPath);
}
public override System.IO.Stream Open()
{
var parts = m_path.Split('/');
var assemblyName = parts[1];
var resourceName = parts[2];
assemblyName = Path.Combine(HttpRuntime.BinDirectory, assemblyName);
var assembly = System.Reflection.Assembly.LoadFile(assemblyName + ".dll");
if (assembly != null)
{
return assembly.GetManifestResourceStream(resourceName);
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
的VirtualPathProvider:
public class SVirtualPathProvider : …Run Code Online (Sandbox Code Playgroud) virtualpathprovider partial-views embedded-resource asp.net-mvc-3
我目前正在尝试发布一个由两个强类型视图组成的表单.这个问题很相似,但没有答案:
当我提交表单时,提交给控制器的模型始终为null.我花了几个小时试图让它发挥作用.这似乎应该很简单.我在这里错过了什么吗?我不需要做ajax只需要能够发布到控制器并呈现一个新页面.
谢谢
这是我的观看代码:
<div>
@using (Html.BeginForm("TransactionReport", "Reports", FormMethod.Post, new {id="report_request"}))
{
ViewContext.FormContext.ValidationSummaryId = "valSumId";
@Html.ValidationSummary(false, "Please fix these error(s) and try again.", new Dictionary<string, object> { { "id", "valSumId" } });
@Html.Partial("_ReportOptions", Model.ReportOptions);
@Html.Partial("_TransactionSearchFields", new ViewDataDictionary(viewData) { Model = Model.SearchCriteria });
}
Run Code Online (Sandbox Code Playgroud)
这是控制器中的代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult TransactionReport(TransactionReportRequest reportRequest)
{
var reportInfo = new List<TransactionReportItem>();
if (ModelState.IsValid)
{
var reportData = _reportDataService.GetReportData(Search.MapToDomainSearchCriteria(reportRequest.SearchCriteria));
if (reportData!=null)
{
reportInfo = reportData.ToList();
}
return View(reportInfo);
}
return View(reportInfo);
}
Run Code Online (Sandbox Code Playgroud)
部分视图本身非常无关紧要,因为他们正在做的就是参与并展示他们的模型.
我想将PartialView呈现为HTML字符串,以便将其返回到SignalR ajax请求.
就像是:
SignalR Hub(mySignalHub.cs)
public class mySignalRHub: Hub
{
public string getTableHTML()
{
return PartialView("_MyTablePartialView", GetDataItems()) // *How is it possible to do this*
}
}
Run Code Online (Sandbox Code Playgroud)
Razor PartialView(_MyTablePartialView.cshtml)
@model IEnumerable<DataItem>
<table>
<tbody>
@foreach (var dataItem in Model)
{
<tr>
<td>@dataItem.Value1</td>
<td>@dataItem.Value2</td>
</tr>
}
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
HTML(MySignalRWebPage.html)
<Script>
...
//Get HTML from SignalR function call
var tableHtml = $.connection.mySignalRHub.getTableHTML();
//Inject into div
$('#tableContainer).html(tableHtml);
</Script>
<div id="tableContainer"></div>
Run Code Online (Sandbox Code Playgroud)
我的问题是我似乎无法在Controller之外渲染PartialView.甚至可以在Controller外部渲染PartialView吗?能够利用Razor附带的令人敬畏的HTML生成能力将是非常好的.
我错了吗?还有另外一种方法吗?
有没有办法在asp.net mvc中提交部分视图表单而无需重新加载父页面,但是只将部分视图重新加载到新状态?与knockout.js如何使用data-bind更新类似.
我的数据表使用可变数量的列/名称进行渲染,所以我不认为knockout.js是这个的选项,所以我试图使用局部视图.
我有两个视图模型:
public class ParentViewModel
{
public Id { get; set; }
.....
public ChildViewModel Child{ get; set; }
}
public class ChildViewModel
{
public ChildId { get; set; }
.....
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public ActionResult Index()
{
.... <some code>
return View("NewIndex", ParentViewModel);
}
[HttpPost]
public ActionResult PartialAction(ChildViewModel childView)
{
return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)
和观点:指数
@model ParentViewModel
....
@Html.Partial("_Partial", Model.Child)
Run Code Online (Sandbox Code Playgroud)
和_Partial
@model ChildViewModel
... do some stuff with child model
Run Code Online (Sandbox Code Playgroud)
当我试图打开索引页面时,我遇到了错误:
传递到字典中的模型项的类型为"ParentViewModel",但此字典需要"ChildViewModel"类型的模型项.
为什么它尝试传递ParentViewModel而不是ChildViewModel.我做错了什么?
我正在学习哈姆尔.
我的视图文件如下:
show.html.haml:
.content
= render 'meeting_info', :locals => { :info => @info }
Run Code Online (Sandbox Code Playgroud)
和_meeting_info.html.haml:
.detail
%table
%caption
Meeting Informations of
= info["meeting_name"]
...
Run Code Online (Sandbox Code Playgroud)
当我尝试运行时,我收到了一个undefined local variable or method 'info'错误.
我正在构建一个配置文件页面,其中包含许多与特定模型(租户)相关的部分 - AboutMe,MyPreferences - 这些事情.这些部分中的每一部分都将是部分视图,以允许使用AJAX进行部分页面更新.
当我点击ActionResultTenantController中的一个时,我能够创建一个强类型视图,并将模型数据传递给视图.部分观点无法实现这一点.
我创建了一个局部视图_TenantDetailsPartial:
@model LetLord.Models.Tenant
<div class="row-fluid">
@Html.LabelFor(x => x.UserName) // this displays UserName when not in IF
@Html.DisplayFor(x => x.UserName) // this displays nothing
</div>
Run Code Online (Sandbox Code Playgroud)
然后我有一个视图MyProfile,将呈现提到的部分视图:
@model LetLord.Models.Tenant
<div class="row-fluid">
<div class="span4 well-border">
@Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml",
new ViewDataDictionary<LetLord.Models.Tenant>())
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
如果我将代码包装在DIV _TenantDetailsPartial里面@if(model != null){},那么页面上就不会显示任何内容,所以我猜测有一个空模型被传递给视图.
为什么我ActionResult在'session'中创建一个来自用户的强类型视图会被传递给视图?如何将'session'中的用户传递给不是从ActionResult?创建的局部视图?如果我遗漏了这个概念,请解释一下.
我可以返回包含渲染视图的Json结果吗?
我需要它来返回提交表单的新ID以及HTML和其他一些属性.
当我需要从Json对象中的一个动作返回两个(或更多)视图结果时,这也很有用.
谢谢!
我希望能够为部分视图提供一种在视图底部包含JavaScript代码/文件的方法.这将使部分视图包含它们所依赖的任何JavaScript文件.例如,如果我想编写需要创建JQueryUI对话框的部分,我想导入JQueryUI JavaScript文件以及添加呈现对话框的JavaScript代码.
我目前正在父视图中编写此代码,这使得使用局部视图毫无意义.
我知道RenderPartial多次调用会导致脚本被多次包含.一旦我知道如何从局部视图中将JavaScript实际包含到主视图中,这是一个可解决的问题.
javascript asp.net-mvc renderpartial partial-views asp.net-mvc-3
partial-views ×10
asp.net-mvc ×7
c# ×2
express ×1
haml ×1
http-post ×1
javascript ×1
jquery ×1
json ×1
knockout.js ×1
model ×1
node.js ×1
razor ×1
signalr ×1