我最近被问到为什么要使用ContentResult而不是返回字符串.不幸的是,我无法给出更好的答案:"这是最好的做法."
有没有人有更好的答案?
更新:为了更好地理解这个问题.有什么不同?
public ActionResult Foo(){
return Content("Some string");
}
public string Bar(){
return "Some string";
}
Run Code Online (Sandbox Code Playgroud) 我在列表框中预选项目时遇到问题.我正在使用带有mvc 3的剃刀视图引擎.我知道有一些帖子有同样的问题,但它们对我不起作用.
课程代码:
public class Foo{
private int _id;
private string _name;
public string Name{
get{
return _name;
}
public int Id {
get{
return _id;
}
}
Run Code Online (Sandbox Code Playgroud)
型号代码:
public class FooModel{
private readonly IList<Foo> _selectedFoos;
private readonly IList<Foo> _allFoos;
public IList<Foo> SelectedFoos{
get{ return _selectedFoos;}
}
public IList<Foo> AllFoos{
get{ return _allFoos;}
}
}
Run Code Online (Sandbox Code Playgroud)
cshtml中的代码:
@Html.ListBoxFor(model => model.Flatschels,
Model.AllFlatschels.Select(fl => new SelectListItem {
Text = fl.Name,
Value = fl.Id.ToString(),
Selected = Model.Flatschels.Any(y => y.Id == fl.Id)
}), new {Multiple …
Run Code Online (Sandbox Code Playgroud) 是否有像Razor的UpdatePanel(在ASPX中)?
我想每30秒自动刷新数据(例如表格,图表......).与每30秒点击以下链接类似:
@Ajax.ActionLink("Refresh", "RefreshItems", new AjaxOptions() {
UpdateTargetId = "ItemList",
HttpMethod = "Post"})
Run Code Online (Sandbox Code Playgroud)
编辑:
我可能应该添加动作链接呈现局部视图.
cshtml中的代码:
<div id="ItemList">
@Html.Partial("_ItemList", Model)
</div>
Run Code Online (Sandbox Code Playgroud)
控制器中的代码:
[HttpPost]
public ActionResult RefreshItems() {
try {
// Fill List/Model
...
// Return Partial
return PartialView("_ItemList", model);
}
catch (Exception ex) {
return RedirectToAction("Index");
}
}
Run Code Online (Sandbox Code Playgroud)
如果PartielView可以刷新自己,它将被创建.
我有一个创建表单来创建一个对象.如果选中了复选框并且标记为必需(通过模型中的属性),则创建模型具有一些仅可见的属性(.hide,.show()).
不幸的是,如果未选中该复选框,则会对隐藏的属性执行所需的验证.
如何禁用此属性所需的验证?
我尝试将input元素的data-val属性设置为false,但这不起作用.
有点想法吗?
在此先感谢Tobias
更新:
这是java脚本代码.data-val属性设置为false.似乎验证不关心这个属性.还有data-val-required属性,但有一个我无法备份的文本.
$(function () {
$("#MyCheckbox")
.change(function () {
if (this.checked) {
$("#divWithChildProperties [data-val]").attr("data-val", true);
$("#divWithChildProperties ").show();
}
else {
$("#divWithChildProperties [data-val]").attr("data-val", false);
$("#divWithChildProperties ").hide();
}
})
});
Run Code Online (Sandbox Code Playgroud) 我想通过Mapi从Outllok导入联系人.标准联系的第一步没有问题:
MAPIFolder contactObjects =
outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
foreach (ContactItem contactObject in contactObjects.Items) {
... import contact ...
}
Run Code Online (Sandbox Code Playgroud)
在第二步中,我还想要导入共享联系人.我发现只有使用
OpenSharedItem(sharedContacts.vcf)
Run Code Online (Sandbox Code Playgroud)
但我不知道我想打开的文件(共享项)的名称.有人知道如何访问共享联系人并可以帮助我吗?
托比
更新:
感谢vcf-Files的提示.但是我在哪里可以找到它们?
UPDATE2:
我玩了OutlookSpy.我可以访问具有共享联系人的文件夹,但只能通过知道id(对于其他用户当然不同):
var ns = outlookObj.GetNamespace("MAPI");
var flr = ns.GetFolderFromID("00000000176A90DED92CE6439C1CB89AFE3668F90100D1AD8F66B576B54FB731302D9BB9F6C40007E4BAC5020000");
foreach (var contactObject in flr.Items) {
...
}
Run Code Online (Sandbox Code Playgroud)
如何在不知道ID的情况下访问该文件夹?
我正在写一个单词的插件来自动编辑协议模板.
在模板中是一个表,我想提取/复制此表中单元格的格式化文本.
现在我这样做:
Range formattedText = agendaTable.Rows[i].Cells[1].Range;
string temp = formattedText.WordOpenXML;
Run Code Online (Sandbox Code Playgroud)
后来我想将文本粘贴到另一个表格单元格中:
otherTablesRow.Cells[1].Range.InsertXML(temp);
Run Code Online (Sandbox Code Playgroud)
格式化是正确的,除了最后的换行符("\ r \n"),它来自我从单元格中提取文本的范围.似乎word使用linebreak标记单元格结束.
因此,在将文本插入其他表格单元格后,我有两个换行符.我怎样才能避免重复的换行?有人知道检索单元格内容的替代方法吗?
更新:可能是我用另一种方式提问.
我的整体问题是将多个格式化文本范围复制到内存中,然后将其粘贴到同一文档中的某个位置.
我正在编写一个asp.net mvc3 Web应用程序.我想使用sqlite数据库.不幸的是,我得到一个SqliteException,说"无法打开数据库".
春季版:1.3.2
NHibernate版本:3.2
DbProvider/ConnectionString的:
<db:provider id="employeesDbProvider"
provider="SQLite-1.0.72"
connectionString="Data Source=.\Database\Employees.db3;Version=3;">
</db:provider>
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
bei System.Data.SQLite.SQLite3.Open(String strFilename, SQLiteOpenFlagsEnum flags, Int32 maxPoolSize, Boolean usePool) in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLite3.cs:Zeile 239.
bei System.Data.SQLite.SQLiteConnection.Open() in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteConnection.cs:Zeile 1022.
bei NHibernate.Connection.DriverConnectionProvider.GetConnection()
Run Code Online (Sandbox Code Playgroud)
我甚至尝试将DataSource设置为绝对路径(C:\ temp\database\Employees.db3),但抛出相同的SqLiteException.
更新:
错误页面上显示的Stacktrace:
[SQLiteException (0x80004005): Unable to open the database file]
System.Data.SQLite.SQLite3.Open(String strFilename, SQLiteOpenFlagsEnum flags, Int32 maxPoolSize, Boolean usePool) in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLite3.cs:239
System.Data.SQLite.SQLiteConnection.Open() in c:\dev\sqlite\dotnet\System.Data.SQLite\SQLiteConnection.cs:1022
NHibernate.Connection.DriverConnectionProvider.GetConnection() +155
NHibernate.Tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.Prepare() +41
NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.GetReservedWords(Dialect dialect, IConnectionHelper connectionHelper) +105
NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.Update(ISessionFactory sessionFactory) +151
NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners) +1012 …
Run Code Online (Sandbox Code Playgroud) 有没有办法在 web api 应用程序中同时使用基于令牌的身份验证和 Windows 身份验证?
我们有一个使用基于令牌(承载)身份验证的“标准”web-api 应用程序。
OAuth 配置如下所示:
OAuthOptions = new OAuthAuthorizationServerOptions {
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
};
app.UseOAuthBearerTokens(OAuthOptions);
Run Code Online (Sandbox Code Playgroud)
一切正常。调用“/Token”端点时,您将获得令牌并获得授权。
现在我想添加 Windows 身份验证,以通过调用 web-api 的客户端的 Windows-os 的登录用户启用“signle-sign-on”。
到目前为止我做了什么:
更改了 web.config 并添加了
<system.web>
<identity impersonate="true" />
<validation validateIntegratedModeConfiguration="false" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
现在每个请求都通过 Windows 用户进行身份验证,而不使用令牌过程。
因此,我添加了另一个提供程序,以使用您的 Windows 身份登录并获取令牌:
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions {
TokenEndpointPath = new PathString("/IdentityToken"),
Provider = new WindowsIdenityAuthorizationServerProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
});
Run Code Online (Sandbox Code Playgroud)
ApplicationOAuthProvider
除了密码验证之外,提供程序应该与为具有用户名和密码的请求生成令牌的程序几乎相同。不幸的是,在针对“/IdentityToken”端点的请求中没有设置用户/身份。
任何人都可以帮我解决这个问题还是我完全走错了路?
我正在测试我的控制器.
在我的一个控制器方法中,我设置了Session变量:
public void Index(){
Session["foo"] = "bar";
return View();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能对此进行单元测试?问题是测试时Session属性为null.无法进行注入,因为Session属性是只读的.
[TestMethod]
public void TestIndex()
// When
_controller.Index();
// Then
Assert.AreEqual("bar", _controller.Session["foo"])
Run Code Online (Sandbox Code Playgroud) 我有一个类名称空间与项目的文件夹结构不匹配.
随着// ReSharper disable once CheckNamespace
我可以禁用暗示的命名空间不对应的文件位置.但是,在重构项目名称空间时,仍会选择该类来调整名称空间.
有没有办法禁用adjust命名空间?
更新样本:
在我的例子中,我有一个必须在System.Web.Mvc
-Namespace中的视图类.文件位置是[Root]> src> Views Root-Project的默认命名空间是Com.xxxxx.Commons.Web
因此,Resharper总是希望将命名空间调整为
Com.xxxxx.Commons.Web.Views
或者Com.xxxxx.Commons.Web
如果我禁用了Views-folder-namespace-flag.
c# ×5
asp.net-mvc ×2
razor ×2
.net ×1
add-in ×1
ajax ×1
asp.net ×1
controller ×1
javascript ×1
mapi ×1
ms-office ×1
ms-word ×1
namespaces ×1
outlook ×1
resharper ×1
return-value ×1
session ×1
shared ×1
spring.net ×1
sqlite ×1
string ×1
unit-testing ×1
validation ×1