例如,在将卡片与套件相关联时,我有:
public class Card
{
public virtual int CardId { get; set; }
// belongs to a Set
public virtual int SetId { get; set; }
public virtual Set Set { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
为什么我需要Set和SetId?
我以前有一个控制器,其代码如下:
public ActionResult Method(int Id)
{
var foo = doThis(Id)
return View("Error");
}
Run Code Online (Sandbox Code Playgroud)
doThis() 是控制器中存在的一个方法,并执行一些逻辑。我现在尝试将所有业务逻辑重新定位到包含一堆类的服务项目。
首先,我添加了一个类库 Project.Services,然后添加了一个类 FooServices,其中包含以下内容:
namespace Project.Services
{
class FooServices
{
public List<Bar> doThis(int Id)
{
//Do stuff
return parentSets;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经从我的 MVC 项目添加了对此项目的引用,并从该服务项目添加了对我的数据模型项目的引用,但我不确定现在如何继续。如何从控制器访问这些方法?
我正处于将使用Azure网站托管的项目的早期阶段.开发此项目的团队最熟悉Azure SQL和Blob存储.该产品将托管大量的mp3和wma音频文件,这些文件将根据要求提供给客户端应用程序.这是使用WebAPI构建的.
最终用户将上传音频文件.我想知道它们是应该存储在blob存储中,还是存储在Azure SQL表中作为某种字节流,或者是我不知道的其他选项.
以与Azure网站一起使用的方式存储大量音频文件的推荐方法是什么?我正在使用Entity Framework Code-First以防万一.
我的MVC视图:
@model MG.ViewModels.Profile.ProfileDetailsViewModel
<div>
<h4>About Me</h4>
<!-- ko if: !isEditingAboutMe() -->
<p data-bind="text: aboutMe()">@Model.AboutMe</p>
@if (Model.CurrentUserCanEdit)
{
<a data-bind="click: editAboutMe">edit</a>
}
<!-- /ko -->
<!-- ko if: isEditingAboutMe() -->
@Html.TextBoxFor(model => model.AboutMe, new { data_bind = "value: aboutMe" })
<a data-bind="click: saveAboutMe">save</a>
<a data-bind="click: cancelAboutMe">cancel</a>
<!-- /ko -->
</div>
<script type="text/javascript">ko.applyBindings(@Html.Raw(Json.Encode(Model)));</script>
Run Code Online (Sandbox Code Playgroud)
我的ProfileVm Javascript:
function ProfileVm() {
var self = this;
self.saveAboutMe = function() {
self.isEditingAboutMe(false);
};
self.cancelAboutMe = function() {
self.isEditingAboutMe(false);
};
self.isEditingAboutMe = ko.observable(false);
self.editAboutMe = function() {
self.isEditingAboutMe(true); …Run Code Online (Sandbox Code Playgroud) 我在常规 MVC 控制器中执行了以下操作:
public ActionResult GetCourses()
{
List<Course> courses = new List<Course>();
if (this.HttpContext.Cache["courses"] == null)
{
courses = _db.Courses.ToList();
this.HttpContext.Cache["courses"] = courses;
}
else
{
courses = (List<Course>)this.HttpContext.Cache["courses"];
}
return PartialView("_Courses", courses);
}
Run Code Online (Sandbox Code Playgroud)
我缓存的原因是因为课程在两个位置加载 - 用于选择课程的模式和列出所有课程的索引视图。该模式仅需要 JSON 来渲染(从 WebAPI 中提取数据),而索引视图是 Razor 生成的视图(通过 MVC 控制器提取)。
如果我已经有了课程数据,我会尝试不再查询数据库。
上面的代码适用于索引视图。现在,对于模态,我只需要发送 JSON,但前提是课程尚未加载到索引视图中。
我尝试从 API 控制器访问 HttpContext,但似乎无法以相同的方式访问它。 如何从 WebAPI 控制器检查 HttpContext.Cache,并在需要时填充它,以便 MVC 控制器可以检查其内容?
这是情况:我有一个Razor生成的项目列表(需要保留Razor生成):
@model MG.ViewModels.Profile.ProfileDetailsViewModel
foreach (var interest in Model.Interests)
{
<span class="subject-title">@interest.SubjectName</span>
<a data-bind='click: function(){viewDescription(@Html.Raw(Json.Encode(interest)))}'class="subject-description-button" href="#" title="View Details">details</a>
}
Run Code Online (Sandbox Code Playgroud)
用户可以通过单击编码viewDescriptionjavascript函数模型的"详细信息"链接来更新每个项目的详细信息:
self.viewDescription = function (data) {
// pull data into KO observables
self.selectedInterestDescription(data.Description);
self.selectedInterestSubject(data.SubjectName);
self.selectedInterestId(data.InterestId);
self.triggerModal(true);
};
Run Code Online (Sandbox Code Playgroud)
在触发的模式中,用户可以向更新描述的端点发送AJAX请求.这很有用,正如我所料.
我正在努力的是 - 当用户完成更新时,剃刀Model仍然具有旧数据.因此,当用户在更新后从Razor生成的列表中单击"详细信息"时,旧@model数据将被编码. 如何将更新的数据推送到@Modeljavascript?
我有一个列出消息的聊天应用程序 - 如果当前消息和之前的消息是由同一个用户发布的,我不希望在当前消息上显示用户名.
为了开始这个,我试图导航出来foreach以通过相对索引访问数组.看起来我甚至无法通过直接索引访问项目,但:
<ul data-bind="foreach:array1">
<li data-bind="text:$parent.array1()[0]">Should be John, works</li>
<li data-bind="text:$parent.array1()[$index]">Should be the same as $data, but throws error</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
最后,我想做以下事情:
<ul data-bind="foreach:array1">
<li data-bind="text:$parent.array1()[$index - 1]">Happens after index 0 only</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
小提琴演示第一期:http: //jsfiddle.net/xveEP/148/
怎么能实现这一目标?
我理解当从BRANCHA> BRANCHB执行合并并在某些文件上选择"Keep Target"时,将导致在TFS历史记录中为这些文件授予"合并信用":将开发分支合并到Main:没有合并的更改
有没有办法让我们撤消/擦除给定文件上的Merge Credits,有效地使我们的开发人员能够通过Source Control Explorer执行/强制合并?
语境:
每周,我们从BRANCHA> BRANCHB合并以同步并行工作.记录具有未解决冲突的任何文件,并通知其所有者对A> B中的这些文件执行合并.然后,我们在这些文件上选择"保留目标" - 预期文件所有者将来合并以解决挂起的冲突.我们将工作委托给个人所有者.
这不太合适,因为TFS将看到初始合并已"解决"冲突(基于其对先前合并历史记录的评估,而不是文件内容).
我想让开发人员对这些文件执行重新合并,而不强制他们使用命令提示符和/ force开关.
继续前进,我的计划是在检查分支>分支合并之前对那些被选为"保留目标"的挂起更改进行"撤消更改".这将使开发人员能够通过避开合并信用额来独立执行合并.
但回头看,分支<>分支/强制合并会导致数百个冲突,我们希望将这些冲突委托给所有者作为同步两个分支的方法.执行经典合并没有报告任何内容,因为先前的合并具有"保持目标".
我正在关注这个问题:EF Code First - 1对1可选关系
我的关系设置如下:
public class Review {
[Key]
public int ReviewId { get; set; }
public virtual Payment Payment { get; set; }
}
public class Payment {
[Key]
public int PaymentId { get; set; }
[ForeignKey("Review")]
public int? ReviewId { get; set; }
public virtual Review Review { get; set; }
}
public class ReviewConfiguration : EntityTypeConfiguration<Review>
{
public ReviewConfiguration()
{
// One-to-One Optional
HasOptional<Payment>(s => s.Payment).WithOptionalDependent(s => s.Review).Map(s => s.MapKey("PaymentId"));
}
}
Run Code Online (Sandbox Code Playgroud)
我得到一个有效的密钥,但另一个从未映射为可选的FK:
我究竟做错了什么? …
我有以下内容:
[DataContract]
public class Video
{
[Key]
[DataMember(IsRequired = false)]
[Required]
public int VideoId { get; set; }
[DataMember(IsRequired = false)]
[Required]
public int UserId { get; set; }
[Required]
[DataMember(IsRequired=true)]
public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这里的目标是通过DataMember装饰告诉WebAPI,我需要的所有内容都是标题 - 有效请求不需要其他两个属性.
然后我试图告诉Entity Framework/SQL数据库中需要其他属性.我将在我的服务或webapi层中分配它们.
如果我使用以下内容仅发送标题,我会得到
{"$ id":"1","message":"请求无效.","modelState":{"$ id":"2","video.VideoId":["需要值". ],"video.UserId":["UserId属性是必需的."]}}
我在这里误解了什么?据我所知,WebAPI不应该关心没有提供videoId.
asp.net-mvc ×6
knockout.js ×3
.net ×1
azure ×1
c# ×1
caching ×1
javascript ×1
tfs ×1
tfs2010 ×1
tfs2012 ×1
tfs2013 ×1