我有一个网站,在布局中定义了导航栏.导航栏用于站点的多个视图中,并具有一些动态内容,这些内容是从数据库中的几个查询生成的.
我想知道渲染这个菜单的最佳做法是什么(在局部视图中定义).
据我所知,我可以通过两种方式实现,每种方式都有一些优点和缺点:
使用Html.Action:+它完全独立于使用布局的视图 - 它添加了一个额外的请求来呈现页面的一部分 - 我添加了一个Action方法,它返回一个未从Ajax调用的Partial视图.
使用Html.Partial:+一个简单的请求来渲染整个视图 - 每个视图模型必须包含导航栏所需的信息
我非常感谢您对此的见解,因为我在我的网站上有几个这样的场景,我不确定哪一个是最好的.
谢谢!
我想在我的ASP.NET应用程序中创建一个手动触发的进程,并将向用户发送一堆电子邮件.由于此过程需要一段时间,因此我创建了一个新线程来发送这些消息并防止在我的Web应用程序中超时.(我知道如果应用程序池被回收或应用程序中存在未处理的异常,这是容易出错的,但这是另一个主题).
为此,我正在做这样的事情:
public ActionResult SendMessages()
{
Task.Factory.StartNew(() => { SendMessagesLongRunningProcess(); });
return View();
}
Run Code Online (Sandbox Code Playgroud)
在长时间运行的过程中,我正在尝试呈现HTML电子邮件的视图并发送它.像这样:
private void SendMessagesLongRunningProcess()
{
var users = GetUsers();
foreach (var user in users)
{
string message = RenderView("EmailMessage", user);
SendEmail(user.email, message);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我知道我的RenderView方法工作正常,因为我用它来渲染其他地方的电子邮件视图.问题是当我尝试在新线程中执行它时,就像我在这里所做的那样.这是我的RenderView方法:
public string RenderView(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, null);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Value does …Run Code Online (Sandbox Code Playgroud) 我有一个绑定到数据源的gridView,我有一个ButtonField作为网格中的一列来执行自定义操作.
当我使用ButtonField时,它引发的事件的CommandArgument具有包含单击的ButtonField的行的从零开始的索引.
我想将ButtonField转换为TemplateField,因此我可以将控件添加到列的Footer,问题是当我将其转换为TemplateField时,CommandArgument不再具有行索引.
有没有办法在TemplateField上获取这样的索引?
我无法使用gridView.SelectedIndex,因为可以在不是所选行的行上单击该按钮.
谢谢你的帮助
我正在创建一个新网站,我希望用户能够使用多种方式登录,基本上用户应该能够在我的网站上创建新用户或使用Facebook连接或使用Twitter的帐户登录该网站.
我已经看过几个关于使用这些方法之一的教程,我想知道的是你认为最好的方法是什么?
到目前为止,我认为最好的方法是创建自定义身份验证模型(类似于对现有授权类进行子类型化).
这是最好的方法吗?你能指点一个尝试类似事情的人的好例子吗?
非常感谢
我在MVC项目中使用dotLess,我无法从导入的较少文件中添加url('')路径.
我有以下少量代码:
@myvar : '../../';
body
{
background-image:url('@{myvar}chosen-sprite.png');
}
Run Code Online (Sandbox Code Playgroud)
在主.less文件中生成以下css,这是正确的:
body {
background-image: url('../../chosen-sprite.png');
}
Run Code Online (Sandbox Code Playgroud)
问题是,如果我将此代码移动到另一个文件夹上的第二个.less文件,然后从less less文件中导入该文件.例如:
@import 'myFolder/mySecondfile.less
Run Code Online (Sandbox Code Playgroud)
现在生成的CSS看起来像这样:
body {
background-image: url('myFolder/../../chosen-sprite.png');
}
Run Code Online (Sandbox Code Playgroud)
有没有办法阻止"myFolder"显示在那里?我知道我可以写出绝对路径,但这意味着每次在站点的根目录(通常在测试时发生)更改地址.
谢谢
我刚刚注意到这种非常简单形式的奇怪渲染.
这是我的标记/ CSS:http://jsfiddle.net/a9PLM/
如您所见,文本字段和按钮共享相同的样式,但它们的大小完全不同.
为什么会这样?
谢谢!
我的控制器上有几个动作方法返回部分视图(ascx),我希望在单击不同的JQuery UI选项卡时呈现这些部分视图.
选项卡的定义如下:
<div id="tabs">
<li><a href="#FirstTab" title="First tab">First tab</a></li>
<li><%= Html.ActionLink("General", "General", new {id=Model.Id}) %></li>
<li><%= Html.ActionLink("Details", "Details", new {id=Model.Id}) %></li>
<div id="FirstTab">
...
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
这样可以很好地显示选项卡,第一个选项卡(带有静态内容)可以正确显示,但是当我单击其他选项卡时,没有任何反应.
如果不是从动作方法返回局部视图而是返回普通内容,它会使内容呈现正常,并且标签可以完美地运行.
我知道我做错了什么吗?
谢谢
我正在尝试使用JQuery Form插件(http://jquery.malsup.com/form/)从我的视图上传文件和一些额外的字段,我希望action方法将Json结果返回给javascript回调.
目前,ActionMethod被正确调用(我可以处理表单中的文件和字段)但是当我返回Json结果时,浏览器会尝试将其作为文件下载(如果我下载文件并查看其内容,那就是JSON内容我要回来了.)
这是我的表格:
<form id="FormNewFile" action="@Url.Content("~/Home/AddFile")" method="post" enctype="multipart/form-data">
<input type="hidden" name="eventId" value="25" />
<input type="text" name="description" />
<input type="file" name="fileName" />
<input type="submit" value="Send!" />
</form>
Run Code Online (Sandbox Code Playgroud)
这是我的javascript:
<script type="text/javascript">
$(function () {
$("#FormNewFile").ajaxForm({
dataType:'json',
success:processJson
});
});
function processJson(a,b) {
alert('success');
}
</script>
Run Code Online (Sandbox Code Playgroud)
这是我的ActionMethod:
[HttpPost]
public ActionResult AddFile(long? eventId, string description)
{
int id = 5;
return Json(new {id});
}
Run Code Online (Sandbox Code Playgroud)
浏览器尝试下载的文件名称类似于AddFilee87ce48e,最后8个字符是随机十六进制字符.
最后,下载文件的内容是:
{ "ID":5}
并且javascript中的processJson函数永远不会被调用.
我google了很多,似乎唯一有用的就是将JSON结果作为动作方法的"内容"结果返回,我认为这是我要采取的方法,但我仍然想知道为什么这不是工作?
有任何想法吗?
我正在做这样的事情:
var myObj = {a:1, b:2, c:3, d:4};
for (var key in myObj){
if (someCondition){
delete(myObj[key]);
}
}
Run Code Online (Sandbox Code Playgroud)
它在我尝试过的示例中运行得很好,但我不确定它在某些场景/浏览器中是否会出现意外行为.
修改正在迭代的对象是否可以?
我有一个文本框字段,其value属性绑定到我的ViewModel中的属性.
问题是ViewModel默认在文本框的"已更改"事件上更新(当文本框失去焦点时).
我希望在执行keypress事件时更新ViewModel.
我不想在每个按键中强制"更改"事件,因为在该事件处理程序中有一些逻辑,并且不必为每次按键执行它.
有没有办法让Kendo在不触发"已更改"事件的情况下更新ViewModel?
我知道我可以手动修改ViewModel,但我想要更简单和自动化的东西.
谢谢你的回答,