在下面链接的5分钟video中,Jon Galloway说,在他的CommentsController控制器类中添加一个名为DeleteComment的方法会按约定自动映射到删除http动词。 MVC与WebApi如何知道如何将方法路由到正确的动词? 我知道global.asax.cs文件中的路由将请求路由到正确的控制器,但是如何将删除请求“按照约定映射到”删除方法或任何方法? 特别是当每个动词可以有多于一种的方法? “按照惯例”使我认为它只是查看方法名称中的第一个单词…但是如果是这样,它将不得不读取方法的签名,以告诉两个删除方法或两个get方法分开……并且在哪里是所有这些定义? video: http : //www.asp.net/web-api/videos/getting-started/delete-and-update 谢谢! 编辑:这是WebApi模板中的示例ValuesController类中的代码。 这是我原来的问题的来源。 区分这些(和控制器中的其他方法)的“惯例”是如何工作的? // GET /api/values public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET /api/values/5 public string Get(int id) { return value; }
我是新来的MVC,我想创build我自己的扩展方法,以便我可以添加到我的剃刀视图可用的HTML帮助器。 Html.DropDownListFor()让你创build一个下拉列表模型上的任何propery。 我想创build一个名为Html.StateDropDownListFor()的帮助器,它完成同样的事情,除了加载与美国所有50个州的下拉菜单。 这样我就不必为每个创build的状态下拉菜单创build一个SelectList。 什么是最简单的方法来做到这一点? 现在我有这个: public static class ExtensionMethods { public static MvcHtmlString StateDropDownList(this HtmlHelper html) { // ??? } } 我甚至closures? 我不想重build一个完整的文本框帮助器,我只是想创build一个帮助器,利用现有的文本框助手,但为我做SelectList。 这样在我的意见,我可以做Html.StateDropDownList(x => x.State) 你的回答非常感谢。 这是答案! 你们是一个很好的帮助,谢谢! 这是完成的扩展方法,以防其他人使用它。 public static MvcHtmlString StateDropDownListFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression) { Dictionary<string, string> stateList = new Dictionary<string, string>() { {"AL"," Alabama"}, {"AK"," Alaska"}, {"AZ"," […]
我有一个控制器的行动,在Firefox本地和生产,并在IE本地,但IE浏览器在生产工作正常。 这是我的控制器操作: public ActionResult MNPurchase() { CalculationViewModel calculationViewModel = (CalculationViewModel)TempData["calculationViewModel"]; decimal OP = landTitleUnitOfWork.Sales.Find() .Where(x => x.Min >= calculationViewModel.SalesPrice) .FirstOrDefault() .OP; decimal MP = landTitleUnitOfWork.Sales.Find() .Where(x => x.Min >= calculationViewModel.MortgageAmount) .FirstOrDefault() .MP; calculationViewModel.LoanAmount = (OP + 100) – MP; calculationViewModel.LendersTitleInsurance = (calculationViewModel.LoanAmount + 850); return View(calculationViewModel); } 这里是我在IE中获得的堆栈跟踪: 错误。 处理您的请求时发生错误。 System.Reflection.TargetException:非静态方法需要一个目标。 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object […]
我的视图模型中包含以下模型 public class FloorPlanSettingsModel { public int Id { get; set; } public int? MainFloorPlanId { get; set; } public string ImageDirectory { get; set; } public string ThumbnailDirectory { get; set; } public string IconsDirectory { get; set; } } 如何从Javascript访问上述属性之一? 我试过这个,但是我得到了“undefined” var floorplanSettings = "@Model.FloorPlanSettings"; alert(floorplanSettings.IconsDirectory);
我正在修改历史/审计日志到我的MVC应用程序正在使用entity framework。 特别是在编辑方法public ActionResult Edit(ViewModel vm) ,我们find了我们正在尝试更新的对象,然后使用TryUpdateModel(object)将表单中的值转换为我们要更新的对象。 我想在该对象的任何字段更改时logging更改。 所以基本上我需要的是在编辑之前对象的一个副本,然后在TryUpdateModel(object)完成工作之后进行比较。 即 [HttpPost] public ActionResult Edit(ViewModel vm) { //Need to take the copy here var object = EntityFramework.Object.Single(x=>x.ID = vm.ID); if (ModelState.IsValid) { //Form the un edited view model var uneditedVM = BuildViewModel(vm.ID); //this line seems to confuse the EntityFramework (BuildViewModel() is used to build the model […]
在安装ASP.NET MVC 3安全更新KB2990942之后,MVC版本从3.0.0.0增加到了3.0.0.1 。 这会导致Visual Studio不再查找引用。 <Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> Resharper没有显示任何问题,但是构build失败了很多未解决的MVCtypes和警告: 警告 :无法parsing此引用。 找不到程序集“System.Web.Mvc,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL”。 检查以确保程序集存在于磁盘上。 如果您的代码需要此引用,则可能会收到编译错误。 这种说法是有道理的。 我的机器上不再有这个版本。 我无法保证开发机器上的确切MVC版本,构build服务器和生产服务器。 他们可能有3.0.0.0或3.0.0.1 ,这可能随时改变。 Windows Update可能随时发布新的MVC版本。 另外,我不想在每次发布MVC更新时增加所有* .csproj文件的版本号。 更新会影响多个版本: KB 2993939:Microsoft ASP.NET MVC 2的安全更新 KB 2993937:Microsoft ASP.NET MVC 3的安全更新 KB 2993928:Microsoft ASP.NET MVC 4.0的安全更新 KB 2992080:Microsoft ASP.NET […]
我升级了我的网站,使用传统的ASP.Net webforms的ASP.Net MVC。 我正在使用MVC路由将旧的.aspx页面的请求redirect到他们的新Controller / Action等价物: routes.MapRoute( "OldPage", "oldpage.aspx", new { controller = "NewController", action = "NewAction", id = "" } ); 这对于页面非常有用,因为它们直接映射到控制器和操作。 但是,我的问题是请求图像 – 我不知道如何redirect这些传入的请求。 我需要将传入的http://www.domain.com/graphics/image.png请求redirect到http://www.domain.com/contenthttp://img.dovov.comimage.png 。 使用.MapRoute()方法时,正确的语法是什么?
所以我编辑我的csproj文件在MVC 3 RTM应用程序设置以下属性: <MvcBuildViews>true</MvcBuildViews> 这应该会导致我的观点在编译期间得到遵守,如果我的观点被破坏,则强制执行构build错误。 这是我做的唯一的改变,但是,当我尝试构build应用程序时,出现以下错误: 在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分是错误的。 此错误可能是由于虚拟目录未被configuration为IIS中的应用程序。 如果我更改为false,项目编译并成功运行, 以下是在csproj文件中configuration的构build任务(这些都不是手动编辑的,它们是由Visual Studio 2010添加的) <Target Name="BeforeBuild"> </Target> <Target Name="AfterBuild"> </Target> –> <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'"> <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" /> </Target> 我在这里错过了什么? 我如何得到MVC 3 / Visual Studio 2010configuration正确,以validation我的意见,在编译时?
有谁知道MVC视图的任何示例或教程,显示父/子数据都在一个表单上,并允许所有的子logging是可编辑的? 比如说,我有一张人的桌子,另一张桌子上有他们拥有的车辆。 其中一种forms,我希望每个车辆都能显示给定的人,并且在出现错误的情况下可以编辑数据元素(即车牌号码,车牌颜色等)。 我不想跳到每个车辆的单独编辑表格。 到目前为止,我的尝试已经使我能够显示数据,但是我无法将其发送回控制器。 我试图尽量缩小这个问题的范围,但是我仍然没有得到它,我认为更广泛的例子可能是为了。 有任何想法吗?
我正在创build一个MVC网站,并打算创build一个Web API,以便在网站内部和第三方使用。 从MVC控制器中,我将调用一个服务层,它将包含业务逻辑,在域模型上运行,执行validation,进行基础设施外部服务调用等。服务层反过来将调用存储库以进行任何数据库交互。 现在,我喜欢ServiceStack的外观,并打算将它用于Web API–它似乎比ASP.NET MVC 4 Web API更成熟。 我的问题是,是否应该将ServiceStack API调用到我的服务层上面,类似于MVC控制器,还是应该将它作为服务层,为Web客户端和MVC控制器提供服务?