在asp.net的MVC3中构建视图模型时,代码应该在哪里实例化该视图模型的对象?我现在主要在控制器中执行它,除了查询数据库的代码.这是代码中的一个例子:
查看型号:
public class WorkListVM
{
//list for employees
[Display(Name = "Select A Employee")]
[Required]
public int? EmployeeId { get; set; }
public GenericSelectList EmployeeList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器代码:
//build view model
var vm = new WorkListVM();
//build employee list
vm.EmployeeList = new GenericSelectList(0,"-- Select Employee --");
var employees = new List<Employee>();
using (var gr = new GenericRepo<Employee>())
{
employees = gr.Get().ToList();
}
foreach(var employee in employees)
{
var gl = new GenericListItem();
gl.Id = employee.EmployeeId;
gl.DisplayFields = …Run Code Online (Sandbox Code Playgroud) 我可以在这里优化班级作业吗?我必须在很多不同的地方这样做,并试图弄清楚如何减少它...复制粘贴 - 内嵌/内联.
@foreach(var m in Model.ObjectList)
{
<td @if(m.RandomObject.isFlagged){
<text>class="flagged"</text>
}
>
@m.RandomObject.Name @m.RandomObject.Description
</td>
}
Run Code Online (Sandbox Code Playgroud)
请注意,不同位置的每个ObjectList都有不同的RandomObjects.
我想这也会奏效,但似乎仍然不是最佳做法:
<td class="flagged@(m.RandomObject.isFlagged)">...
Run Code Online (Sandbox Code Playgroud)
然后有css定义 .flaggedtrue
如果有n个属性,那么.GetProperties O(n)的Big-O还是反射中涉及的过程增加了复杂性?
假设有这个定义的类:
public class Reflector
{
public string name { get; set; }
public int number { get; set; }
public bool flag { get; set; }
public List<string> etc { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后进行此调用:
var reflect = new Reflector();
PropertyInfo[] properties = reflect.GetType().GetProperties();
Run Code Online (Sandbox Code Playgroud)
什么是时间复杂度,即Big-O .GetProperties()?考虑到有4个属性,这只需要4次迭代还是比它更复杂?或者,是否O(1)具有一些标准的复杂性集到达列表 - 这似乎仍然是O(n)只是为了构建属性数组?
我有一个简单的页面,只是尝试将加载事件附加到文档.我不确定在jQuery中使用哪个事件处理程序来执行此操作.我试着$()和$(document).ready和.load,但既不似乎在正确的时间运行代码.我应该使用.on,.live?或者有什么我做错了.这是一个示例:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
$(document).ready(
showWidth()
);
function showWidth() {
alert($('#textTitle').width());
}
</script>
</head>
<body>
<div class="page">
<div id="title">
<h1 id="textTitle">yo</h1>
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我运行此警报显示null.
生成的错误是"条件编译已关闭".
来自MSDN的条件编译黑客很普遍但是失败了.
有几个像这样的问题: 在Razor中关闭了条件编译?
他们都指出了答案:
/*@cc_on @*/
Run Code Online (Sandbox Code Playgroud)
从MSDN上看到的文章:
http://msdn.microsoft.com/en-us/library/5y5529x3(v=vs.90).aspx
但是,这个hack很失败,或者我似乎无法实现它.尾随@*导致.cshtml文件中的剩余代码被注释掉.此外,@cc_on给出错误"cc_on在当前上下文中不存在".
这是在.cshtml文件中测试的一段代码:
<script type="text/javascript">
@for(int i = 0; i < 5; i++)
{
document.write(@i);
}
</script>
Run Code Online (Sandbox Code Playgroud)
这将导致"条件编译关闭"消息.试图在其中插入变通方法将导致来自for循环的上下文",","期望","或"期望;"或"预期""中存在各种其他消息,例如"cc_on".
如何在javascript脚本标记中使用剃刀for循环?
我正在考虑使用,<sessionState mode="InProc" timeout="45" />因为有些用户反复登录,我想节省一些时间.但是,在我将其添加到我的web.config文件之前,我想确保没有副作用.
我读了很多sessionState版本,虽然我已经很清楚发生了什么,但我很想知道asp.net mvc 3应用程序的默认设置是什么,因为此时sessionState我的内部没有定义system.web.
我知道应用程序可以在Session["key"]没有声明的情况下访问,尽管我试图避免在Session上加载这种类型的负载.我假设我的应用程序继承了IIS 7中的一个设置(此应用程序位于共享托管环境中).
我知道如果我使用专用数据库或服务器进行会话可能会出现问题,但这只是一个基本设置,只要这样,没什么特别的.
sessionStateasp.net mvc 3 有默认值吗?它只是被遗传了吗?web.config如果它在IIS中的其他位置定义,是否会因为覆盖它而产生副作用?
我试图在dropdownlist文本中显示多个值.下面举例说明.
SelectList(Parts, "pno", "pcode"+"pname")
Run Code Online (Sandbox Code Playgroud)
哪里
pno 是部件号.
pcode 是部分代码.
pname 是部分名称
现在请告诉我如何使用viewmodel连接部分代码和名称(我想使用域模型来实现).
我正在使用一个查询,该查询撤回了大量填充的导航属性.基本上它看起来像这样:
using( var context = new MyApplicationContext() )
{
DbSet<BaseTable> dbSet = context.Set<BaseTable>();
IQueryable<BaseTable> query = dbSet;
query = query.Include(entity => entity.T.C);
query = query.Include(entity => entity.TC.Select(tc => tc.T.M));
query = query.Include(entity => entity.TC);
query = query.Include(entity => entity.W.FW.F.S);
query = query.Include(entity => entity.W.FW.P);
query = query.Include(entity => entity.W.PL.P);
query = query.Include(entity => entity.W.PL);
query = query.Include(entity => entity.W.E);
query = query.Include(entity => entity.E);
query = query.Where( set of conditions );
List<BaseTable> Loaded = query.ToList();
}
Run Code Online (Sandbox Code Playgroud)
但是,运行此代码会产生错误
IO操作超时
[TimeoutException:IO操作超时] MySql.Data.MySqlClient.TimedStream.StopTimer()+ …
我正在尝试编写一个函数,该函数查看对象数组(第一个参数)并返回包含给定对象(第二个参数)的所有键/值对的所有对象的数组。
source我下面的代码仅在对象(第二个参数)包含一个键/值对时才有效。当source对象有两个或更多键/值对时,结果不符合预期。
如何解释对象中多个键/值对source?
function findObjects(collection, source) {
var result = [];
for (i=0; i<collection.length; i++) {
for (var prop in source) {
if (collection[i].hasOwnProperty(prop) && collection[i][prop] == source[prop]) {
console.log('Collection\'s object ' + [i] + ' contains the source\'s key:value pair ' + prop + ': ' + source[prop] + '!');
result.push(collection[i]);
} else {
console.log('fail');
}
}
}
console.log('The resulting array is: ' + result);
return result;
}
findObjects([{ "a": 1, "b": 2 }, …Run Code Online (Sandbox Code Playgroud) 我是使用 Razor 页面的新手,因此我在模型目录中有一个具有以下值的类:
public int Id { set; get; }
public string CustomerCode { set; get; }
public double Amount { set; get; }
Run Code Online (Sandbox Code Playgroud)
在我的控制器(.cs 文件)中,我有以下内容:
public ActionResult Index()
{
Customer objCustomer = new Customer();
objCustomer.Id = 1001;
objCustomer.CustomerCode = "C001";
objCustomer.Amount = 900.78;
return View();
}
Run Code Online (Sandbox Code Playgroud)
...现在,我想通过我的 Index.cshtml 页面显示这些值,但是当我运行该应用程序时,我只得到我输入的与值相反的实际代码:
...这就是 .cshtml 页面设置的方式:
@model Mvccustomer.Models.Customer
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<div>
The customer id is : <%= Model.Id %> <br />
The customer id is : <%= Model.CustomerCode %> …Run Code Online (Sandbox Code Playgroud) c# ×6
javascript ×3
razor ×3
asp.net ×1
asp.net-mvc ×1
css ×1
jquery ×1
mysql ×1
onload-event ×1
optimization ×1
reflection ×1
viewmodel ×1
web-config ×1