小编wil*_*lvv的帖子

ASP.NET MVC:使用Html.Partial还是Html.Action?

我有一个网站,在布局中定义了导航栏.导航栏用于站点的多个视图中,并具有一些动态内容,这些内容是从数据库中的几个查询生成的.

我想知道渲染这个菜单的最佳做法是什么(在局部视图中定义).

据我所知,我可以通过两种方式实现,每种方式都有一些优点和缺点:

使用Html.Action:+它完全独立于使用布局的视图 - 它添加了一个额外的请求来呈现页面的一部分 - 我添加了一个Action方法,它返回一个未从Ajax调用的Partial视图.

使用Html.Partial:+一个简单的请求来渲染整个视图 - 每个视图模型必须包含导航栏所需的信息

我非常感谢您对此的见解,因为我在我的网站上有几个这样的场景,我不确定哪一个是最好的.

谢谢!

asp.net-mvc partial-views razor

10
推荐指数
1
解决办法
2883
查看次数

ASP.NET MVC:新线程中的异常呈现视图

我想在我的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)

asp.net asp.net-mvc multithreading view

9
推荐指数
1
解决办法
1655
查看次数

Asp.Net GridView获取TemplateField上的当前行

我有一个绑定到数据源的gridView,我有一个ButtonField作为网格中的一列来执行自定义操作.

当我使用ButtonField时,它引发的事件的CommandArgument具有包含单击的ButtonField的行的从零开始的索引.

我想将ButtonField转换为TemplateField,因此我可以将控件添加到列的Footer,问题是当我将其转换为TemplateField时,CommandArgument不再具有行索引.

有没有办法在TemplateField上获取这样的索引?

我无法使用gridView.SelectedIndex,因为可以在不是所选行的行上单击该按钮.

谢谢你的帮助

asp.net gridview

8
推荐指数
1
解决办法
1万
查看次数

使用Asp.Net MVC的混合身份验证(Forms,FB connect,twitter,openId)

我正在创建一个新网站,我希望用户能够使用多种方式登录,基本上用户应该能够在我的网站上创建新用户或使用Facebook连接或使用Twitter的帐户登录该网站.

我已经看过几个关于使用这些方法之一的教程,我想知道的是你认为最好的方法是什么?

到目前为止,我认为最好的方法是创建自定义身份验证模型(类似于对现有授权类进行子类型化).

这是最好的方法吗?你能指点一个尝试类似事情的人的好例子吗?

非常感谢

authentication asp.net-mvc facebook login

8
推荐指数
1
解决办法
1688
查看次数

少加防止添加相对网址

我在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"显示在那里?我知道我可以写出绝对路径,但这意味着每次在站点的根目录(通常在测试时发生)更改地址.

谢谢

path less

8
推荐指数
2
解决办法
2588
查看次数

CSS:提交按钮看起来比文本输入和文本区域小

我刚刚注意到这种非常简单形式的奇怪渲染.

这是我的标记/ CSS:http://jsfiddle.net/a9PLM/

如您所见,文本字段和按钮共享相同的样式,但它们的大小完全不同.

为什么会这样?

谢谢!

html css styles

7
推荐指数
1
解决办法
9702
查看次数

Asp.Net MVC使用来自JQuery UI选项卡的ajax加载局部视图

我的控制器上有几个动作方法返回部分视图(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)

这样可以很好地显示选项卡,第一个选项卡(带有静态内容)可以正确显示,但是当我单击其他选项卡时,没有任何反应.

如果不是从动作方法返回局部视图而是返回普通内容,它会使内容呈现正常,并且标签可以完美地运行.

我知道我做错了什么吗?

谢谢

ajax asp.net-mvc jquery-ui

6
推荐指数
1
解决办法
1万
查看次数

ASP.Net MVC使用jquery-form插件上传文件并返回Json结果

我正在尝试使用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结果作为动作方法的"内容"结果返回,我认为这是我要采取的方法,但我仍然想知道为什么这不是工作?

有任何想法吗?

javascript forms ajax asp.net-mvc json

6
推荐指数
1
解决办法
5493
查看次数

Javascript:使用'for'删除正在迭代的对象的属性是否安全

我正在做这样的事情:

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)

它在我尝试过的示例中运行得很好,但我不确定它在某些场景/浏览器中是否会出现意外行为.

修改正在迭代的对象是否可以?

javascript

6
推荐指数
2
解决办法
582
查看次数

Kendo UI:强制在TextBox中的KeyPress上更新ViewModel

我有一个文本框字段,其value属性绑定到我的ViewModel中的属性.

问题是ViewModel默认在文本框的"已更改"事件上更新(当文本框失去焦点时).

我希望在执行keypress事件时更新ViewModel.

我不想在每个按键中强制"更改"事件,因为在该事件处理程序中有一些逻辑,并且不必为每次按键执行它.

有没有办法让Kendo在不触发"已更改"事件的情况下更新ViewModel?

我知道我可以手动修改ViewModel,但我想要更简单和自动化的东西.

谢谢你的回答,

binding mvvm kendo-ui

6
推荐指数
1
解决办法
4546
查看次数