我正在用ASP.NET MVC编写单页ajax应用程序 - 大量使用jQuery.我在整个应用程序中执行类似以下操作:
JS:
$.ajax({
type: "GET",
url: "/Home/GetSomePartialView/",
data: someArguments,
success: function (viewHTML) {
$("#someDiv").html(viewHTML);
},
error: function (errorData) { onError(errorData); }
});
Run Code Online (Sandbox Code Playgroud)
控制器C#:
public ActionResult GetSomePartialView(SomeArgumentModel someArguments)
{
return PartialView("_CaseManager");
}
Run Code Online (Sandbox Code Playgroud)
这非常有效.将viewHTML(在AJAX success功能)返回一个字符串,我可以推它在页面上没有问题.
现在我想做的是不仅返回PartialView HTML字符串,还返回某种状态指示器.这是权限的事情 - 例如,如果有人试图访问他们没有权限的应用程序的一部分,我想返回一个比他们要求的不同的PartialView,并在弹出窗口中显示一条消息告诉他们为什么他们有一个不同于他们所要求的观点.
所以 - 要做到这一点,我想做以下事情:
控制器C#:
public ActionResult GetSomePartialView(SomeArgumentModel someArguments)
{
ReturnArgs r = new ReturnArgs();
bool isAllowed = CheckPermissions();
if (isAllowed)
{
r.Status = 400; //good status ... proceed normally
r.View = PartialView("_CaseManager");
}
else
{
r.Status = …Run Code Online (Sandbox Code Playgroud) 我正在SelectList我的控制器中构建以下内容.
var u = new NewUser();
u.UserTypeOptions = new SelectList(new List<SelectListItem>
{
new SelectListItem { Selected = true, Text = string.Empty, Value = "-1"},
new SelectListItem { Selected = false, Text = "Homeowner", Value = ((int)UserType.Homeowner).ToString()},
new SelectListItem { Selected = false, Text = "Contractor", Value = ((int)UserType.Contractor).ToString()},
});
return u;
Run Code Online (Sandbox Code Playgroud)
并在我的视图上显示如下:
@Html.DropDownListFor(m => m.UserType, Model.UserTypeOptions)
Run Code Online (Sandbox Code Playgroud)
看起来我在它SelectListItem应该是一个非常简单的下拉列表中给它一个有效的一组s,但是我没有获得<option>具有良好值和文本的有效列表,而是得到这个:
<select data-val="true" data-val-range="A user type must be selected." data-val-range-max="2" data-val-range-min="1" data-val-required="The UserType field is required." id="UserType" name="UserType" …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET MVC应用程序,它以UTC格式存储所有SQL DateTime,因此无论客户端从哪个时区访问该站点,时间都是一致的.
现在,我想重新向用户显示正确的时间,所以每次在我的View中显示时间我都会使用:
timeVariable.ToLocalTime();
Run Code Online (Sandbox Code Playgroud)
但是,.ToLocalTime()基于服务器,而不是客户端.
我是否需要在客户端上使用JavaScript处理此问题?
我可能可以将时区作为请求的一部分传递并让控制器处理该事件,但我假设有更好的方法来执行此操作.或者不存在?
在此先感谢您的帮助!
-Matt
我正在构建一个ASP.NET MVC项目,并采用以下架构:
所以,假设我想添加一个用户.我NewUserInputModel在Core项目中定义了一个.我给它一些数据注释,如[Required].执行此操作后,Web项目将根据这些注释执行客户端验证.
我的问题是关于服务器端验证.我要验证的NewUserInputModel使用正在在客户端使用相同的规则,我想运行一个验证的天气NewUserInputModel从进来API或网络项目.
我意识到我可以ModelState.IsValid从Web项目中的Controller 调用- 但是我想从Core项目中调用该验证,以便所有验证逻辑都存在于Core中.这样,无论这个模型如何进入Core逻辑,我总是调用相同的验证.我不想将System.Web引用泄漏到我的Core项目中.
这是一个合理的设计吗?我认为是 - 但如果有什么东西闻起来,我会很高兴听到它.
在此先感谢您的帮助.
我有一个运行的ASP.NET MVC Web应用程序http://localhost/myappname.从jQuery,我使jQuery $ .ajax()调用基于一些用户操作返回部分视图.我通常从包含我通过Ajax调用的函数的同一个控制器中的视图调用它.例如,我的Home控制器中的视图具有以下功能(效果很好):
function loadMyPartialView() {
$.ajax({
type: 'GET',
url: 'Home/GetNavigationTreePV/',
success: function (data) { onSuccess(data); },
error: function (errorData) { onError(errorData); }
});
return true;
}
Run Code Online (Sandbox Code Playgroud)
上面的url被解析为,http://localhost/myappname/Home/GetNavigationTreePV并且正确返回了部分视图.
现在,我正在尝试使用qUint对我的功能进行单元测试.在这个测试用例中,我只想验证我到达函数的末尾并返回true.我创建了一个QUNIT控制器和相应的视图(加载我的单元测试JavaScript文件).从包含我的单元测试的test.js文件中,我尝试调用我的Home视图中的相同函数,如上面的那个.但是,因为我现在已经用完了QUNIT控制器,所以url被解析了http://localhost/myappname/qunit/Home/GetNavigationTreePV.
我已经尝试将我的ajax请求的url更改为/Home/GetNavigationTreePV/(使用前面的正斜杠),但是当我这样做时,我得到以下url http://localhost/myappname/Home/GetNavigationTreePV.
所以,要清楚,我试图以一种始终从我的MVC应用程序的根开始的方式编写我的ajax请求,然后附加我的$ .ajax()函数中给出的url参数.
有一个简单的方法吗?我是以一种奇怪的方式谈论这件事吗?
我有一个像这样的JavaScript对象 - 使用闭包来模拟私有和公共函数/变量:
var myCoolObject = function(x, y) {
var prop1 = "a cool prop1 value";
var negX = x * -1;
var negY = y * -1;
var xyProduct = x * y;
return {
PublicProp1: prop1,
getXYProduct: function() { return xyProduct; },
getNegX: function() { return negX; },
getNegY: function() { return negY; }
}
}
Run Code Online (Sandbox Code Playgroud)
我将创建4000左右这个对象的实例,并从我所读通过添加功能prototype会比添加它们,因为我有以上(更有效,因为在我的例子,每个实例都会有它自己的getXYProcust(),getNegX()和getNegY()功能.
我的问题是双重的 - 我上面的方法真的"低效"吗?我意识到低效率是一个相对的术语 - 但这是我可能会注意到的.如果是低效的,我怎么会添加这些功能给prototype的myCoolObject?我尝试了以下方法:
myCoolObject.prototype.protoProp = "pppp";
myCoolObject.prototype.getAtMeBro …Run Code Online (Sandbox Code Playgroud) 我使用带有Ajax绑定的Telerik MVC Grid,并且在将对象传递给控制器以用于过滤数据时遇到问题.我能够传递简单数据(string,int),但不能传递更复杂的对象.
例如,我可以这样没问题:
.DataBinding(dataBinding => dataBinding.Ajax().Select("_CasesAjaxBinding", "Home", new {orderId = "12345"} ))
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中,像这样处理orderId:
public ActionResult _CasesAjaxBinding(string orderId)
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是当我尝试将更复杂的对象(在本例中为@Model)传递给控制器时,就像这样(@Model是类型CaseFilterModel):
.DataBinding(dataBinding => dataBinding.Ajax().Select("_CasesAjaxBinding", "Home", new {filterSpec = @Model} ))
Run Code Online (Sandbox Code Playgroud)
然后尝试处理对象,如下所示:
public ActionResult _CasesAjaxBinding(CaseFilterModel filterSpec)
Run Code Online (Sandbox Code Playgroud)
filterSpec参数始终为null.
提前感谢任何想法!
我被问到以下问题,我不知道如何回答.我想知道是否有人可以提供帮助:
使用C#,不使用任何数学函数(不允许Round()和Truncate())取以下双3.009784654并将其四舍五入到4位小数.
这是面试,而不是课堂项目或家庭作业.面试官似乎试图让我使用mod,但我仍然想不出怎么做.
谢谢!
我知道它AmazonDynamoDBClient是线程安全的,我可以在应用程序启动时初始化一个单例,并在应用程序的整个生命周期中继续使用它。
这同样适用于吗DynamoDBContext?
我可能在这里错过了一些基本的知识-但是否可以HttpContext.Current在自定义NLog事件中检索?
我试图给每个请求一个唯一的Guid,以便我可以将日志消息与单个事件相关联(即,将单个请求的每个日志事件关联在一起)。因此,我想将此Guid存储在中HttpContext.Current.Items,然后在NLog目标中检索它,并将其包括在日志消息中。
这是我要访问的示例目标HttpContext.Current:
[Target("AzureTableTarget")]
public class AzureTableTarget : TargetWithLayout
{
public AzureTableTarget()
{
_appSettings = IoCResolver.Get<IAppSettings>();
}
protected override void Write(LogEventInfo logEvent)
{
var correlationId = HttpContext.Current; //This is always null
var batchOperation = new TableBatchOperation();
CxLogEventBuilder.Build(_appSettings, logEvent).ForEach(batchOperation.Insert);
_loggingTable.ExecuteBatchAsync(batchOperation);
}
}
Run Code Online (Sandbox Code Playgroud) c# ×5
asp.net-mvc ×4
javascript ×3
jquery ×2
datetime ×1
httpcontext ×1
logging ×1
nlog ×1
qunit ×1
rounding ×1
telerik-mvc ×1
timezone ×1
url ×1
validation ×1