很难找到这个具体问题的答案,所以生病了:
我们希望建立完全语言特定的网址
www.mysite.com/EN
www.mysite.com/DE
这是在RouteConfig中完成的
url: "{language}/{controller}/{action}/{id}"
Run Code Online (Sandbox Code Playgroud)
但接下来是棘手的部分:
www.mysite.com/EN/Categories
www.mysite.com/DE/Kategorien
即使控制器名称以多种语言显示,但指向同一个控制器.这甚至可能吗?
我试图对从WebAPI(OData)控制器调用的一段代码进行单元测试,并接受一个HttpControllerContext:
public string MethodToTest(HttpControllerContext context)
{
string pub = string.Empty;
if (context != null)
{
pub = context.Request.RequestUri.Segments[2].TrimEnd('/');
}
return pub;
}
Run Code Online (Sandbox Code Playgroud)
要对此进行单元测试,我需要一个HttpControllerContext对象.我该怎么办呢?我最初试图用Microsoft Fakes来存根,但HttpControllerContext似乎没有接口(为什么??),所以这似乎不是一个选项.我应该只是新建一个新的HttpControllerContext对象,并可能存根构造函数参数?或者使用Moq框架(而不是!)
对于我的WebAPI OData应用程序,我试图让我的客户端(浏览器)决定数据输出应该是什么格式.由于$ format尚未在WebAPI OData中实现,我在这里使用Raghuramn的示例:https://gist.github.com/raghuramn/5556691
var queryParams = request.GetQueryNameValuePairs();
var dollarFormat = queryParams.Where(kvp => kvp.Key == "$format").Select(kvp => kvp.Value).FirstOrDefault();
if (dollarFormat != null)
{
request.Headers.Accept.Clear();
request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(dollarFormat));
// remove $format from the request.
request.Properties[HttpPropertyKeys.RequestQueryNameValuePairsKey] = queryParams.Where(kvp => kvp.Key != "$format");
}
Run Code Online (Sandbox Code Playgroud)
这适用于JSON($ format = application/json; odata = fullmetadata)和JSON light(format = application/json; odata = light),但到目前为止还不适用于xml.
如果我将$ format = application/XML添加到查询字符串,它仍然输出到json light.我如何强制XML输出?
编辑:
即使我通过发送 带有请求的Content-type:application/xml和 Accept:application/xml 强制在Fiddler中 使用xml,响应只会列出:Content-Type:application/json; 的OData = minimalmetadata; 流= TRUE; 字符集= utf-8的 …
在MVC4项目中,我使用部分视图,即使用ViewModel并在其上具有GET Form。在Controller动作中,我希望ViewModel对象包含一些数据。当此部分放置在普通(.cshtml)视图上时,我通过Controller操作中的预期ViewModel对象接收了数据。但是,将此部分放置在另一个部分视图上时,由于某种原因,控制器操作中的ViewModel对象为空。当我逐步完成HttpGet表单的创建时,传入的模型不是空的,但是当调用GET控制器操作时,该模型为空。
有人知道原因吗?这是我不知道的某些MVC行为吗?谢谢!
部分:
@model ViewModel
@if (Model != null)
{
using (Html.BeginForm("DoSomething", "Home", FormMethod.Get))
{
@Html.HiddenFor(m => m.Object)
<input id="btnSend" type="submit">
}
}
Run Code Online (Sandbox Code Playgroud)
其他部分:
@using OtherViewModel.ViewModel
@Html.Partial("The Partial", Model.ViewModel, ViewData)
Run Code Online (Sandbox Code Playgroud)
风景:
@Html.Partial("_TheOtherPartial", Model.OtherViewModel, new ViewDataDictionary(ViewData) {
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "prefix" }
})
Run Code Online (Sandbox Code Playgroud)
控制器
[HttpGet]
[AllowAnonymous]
public ActionResult DoSomething(ViewModel data)
{
}
Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码来更新db中的某些记录:
IList<Item> list;
using (DbContext context = new DbContext()
{
list = Item.ToList();
foreach (Item item in list)
{
// attach the item
context.Item.Attach(item);
item.Updated = DateTime.Now;
context.Items.Add(item);
context.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是EF正在插入一个新项目,而不是更新更新的项目......我在网站上搜索了abit并看到了将项目附加到DbContext的建议,但那不起作用?我究竟做错了什么?
在MVC表单发布方案中,我希望在将数据发布到服务器之后有一个空文本框,并且该页面再次提供给用户.现在,发布的用户名显示在回发后的文本框中.
@using (Html.BeginForm("SignIn", "Account", FormMethod.Post))
{
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control", @type = "email", required = "", pattern = "^", @placeholder = "E-mail", @title = "", @id = "UserName", data_hint = "Required"})
}
Run Code Online (Sandbox Code Playgroud)
首先,包含用户名的模型被发送回表单,所以我认为这导致了它.我现在发回一个"干净"的模型,甚至强制空的用户名,但这也没有帮助.
return View("SignIn", "_Layout", new ViewModel
{
UserName = ""
});
Run Code Online (Sandbox Code Playgroud)
如何在回发后获得空文本框?