本文将分享asp.net-mvc–无法弄清楚为什么模型在回发时为null?的详细内容,此外,我们还将为大家带来关于angularjs–无法弄清楚为什么我的角度视图是空白的、asp.net–__doPo
本文将分享asp.net-mvc – 无法弄清楚为什么模型在回发时为null?的详细内容,此外,我们还将为大家带来关于angularjs – 无法弄清楚为什么我的角度视图是空白的、asp.net – __doPostBack无法在回发时呈现、asp.net – 无法弄清楚如何将我的NON-MVC站点从sitemap.xml路由到另一个.aspx页面、asp.net – 模型在表单发布到控制器时始终为NULL的相关知识,希望对你有所帮助。
本文目录一览:- asp.net-mvc – 无法弄清楚为什么模型在回发时为null?
- angularjs – 无法弄清楚为什么我的角度视图是空白的
- asp.net – __doPostBack无法在回发时呈现
- asp.net – 无法弄清楚如何将我的NON-MVC站点从sitemap.xml路由到另一个.aspx页面
- asp.net – 模型在表单发布到控制器时始终为NULL
asp.net-mvc – 无法弄清楚为什么模型在回发时为null?
在博客文章页面上,我有一个“添加注释”链接,它调用一些JQuery来呈现一个强烈键入CommentModel的局部视图.链接也传入博客文章的ID,部分编码如下:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Blog.Models.CommentModel>" %> <% using (Html.BeginForm()) { %> <%: Html.HiddenFor(x => x.Post.ID) %> <%: Html.HiddenFor(x => x.CommentID) %> <%: Html.TextBoxFor(x => x.Name) %><br /> <%: Html.TextBoxFor(x => x.Email) %><br /> <%: Html.TextBoxFor(x => x.Website) %><br /> <%: Html.TextAreaFor(x => x.Comment) %><br /> <input type="submit" value="submit" /> <% } %>
CommentsModel很简单,看起来像这样(我还没有应用任何验证或任何东西):
public class CommentModel { public BlogPost Post { get; set; } public int CommentID { get; set; } public string Name { get; set; } public string Email { get; set; } public string Website { get; set; } public string Comment { get; set; } }
然后,这应该发布到一个简单的控制器操作,该操作将注释添加到数据库并将用户返回到页面.为了简单起见,我删除了大部分代码,但它看起来类似于:
[HttpPost] public ActionResult CommentForm(CommentModel model) { if (ModelState.IsValid) { } else { } }
一切都按预期工作,除了在发布评论表单时,评论模型为空.我无法弄清楚为什么这是空的.当我查看渲染的局部视图的来源时,我可以看到“Post.ID”填充了正确的ID,但是在提交表单时会丢失.
我错过了一些明显的东西吗?我在过去设置了与此类似的表格并且工作正常,我无法理解为什么现在不行.提前致谢.
后来编辑:
我错误地输入了代码并从公共ActionResult CommentForm(CommentModel注释)更改了公共ActionResult CommentForm(CommentModel模型),这导致了问题.
谢谢您的帮助.
解决方法
我可以看到的问题是,当发布表单时,会传递Post.ID和CommentID,而您的操作则需要一个类型为“CommentModel”的完整对象.模型绑定器无法将发布数据映射到相应的模型对象中.
angularjs – 无法弄清楚为什么我的角度视图是空白的
我应该提一下,我使用Yeoman来生成基本的脚手架,但是我一直在系统地剥离各种东西(主要是Bower),因为我们不允许在我们的网络上使用它.所以我一直在重建一个喜欢我们网络的基本种子应用程序,并且与我们的CI服务器配合得很好.
app.js
'use strict'; angular.module('angularapp',[ 'ngCookies','ngResource','ngSanitize','ui.router' ]) .run(['$rootScope','$state','$stateParams',function($rootScope,$state,$stateParams) { // It's very handy to add references to $state and $stateParams to the $rootScope // so that you can access them from any scope within your applications.For example,// <li ng-> will set the <li> // to active whenever 'contacts.list' or one of its decendents is active. $rootScope.$state = $state; $rootScope.$stateParams = $stateParams; $state.transitionTo('home'); } ]) .config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider) { $urlRouterProvider.otherwise('/'); $stateProvider.state('home',{ //name: 'home',url: '/',templateUrl: 'views/main.html',controller: 'MainCtrl' }); } ]);
main.js
'use strict'; angular.module('angularapp',[]) .controller('MainCtrl',function ($scope) { $scope.awesomeThings = [ 'HTML5 Boilerplate','AngularJS','Karma' ]; });
的index.html
<!doctype html> <!--[if lt IE 7]> <html> <![endif]--> <!--[if IE 7]> <html> <![endif]--> <!--[if IE 8]> <html> <![endif]--> <!--[if gt IE 8]><!--> <html> <!--<![endif]--> <head> <Meta charset="utf-8"> <Meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <Meta name="description" content=""> <Meta name="viewport" content="width=device-width"> <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> <!-- build:css styles/vendor.css --> <link rel="stylesheet" href="libs/sass-bootstrap/dist/css/bootstrap.css" /> <link rel="stylesheet" href="libs/ng-grid-2.0.7/ng-grid.css" /> <!-- endbuild --> <!-- build:css({.tmp,app}) styles/main.css --> <link rel="stylesheet" href="styles/main.css"> <!-- endbuild --> </head> <body ng-app="angularapp"> <!--[if lt IE 7]> <phttps://www.jb51.cc/tag/bro/" target="_blank">browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> <![endif]--> <!-- Add your site or application content here --> <div ui-view></div> test <a ui-sref="home">home</a> <!--[if lt IE 9]> <script src="libs/es5-shim/es5-shim.js"></script> <script src="libs/json3/lib/json3.min.js"></script> <![endif]--> <!-- build:js scripts/vendor.js --> <script src="libs/jquery-1.10.2/jquery.js"></script> <script src="libs/angular-1.2.10/angular.js"></script> <script src="libs/sass-bootstrap/dist/js/bootstrap.js"></script> <script src="libs/angular-resource/angular-resource.js"></script> <script src="libs/angular-cookies/angular-cookies.js"></script> <script src="libs/angular-sanitize/angular-sanitize.js"></script> <script src="libs/ui-router-0.2.8/release/angular-ui-router.js"></script> <script src="libs/ngStorage/ngStorage.js"></script> <script src="libs/ng-grid-2.0.7/ng-grid-2.0.7.min.js"></script> <!-- endbuild --> <!-- build:js({.tmp,app}) scripts/scripts.js --> <script src="scripts/app.js"></script> <script src="scripts/controllers/main.js"></script> <!-- endbuild --> </body> </html>
main.html中
<div> <ul> <li><a ng-href="#">Home</a></li> <li><a ng-href="#">About</a></li> <li><a ng-href="#">Contact</a></li> </ul> <h3>angular</h3> </div> <div> <h1>'Allo,'Allo!</h1> <p> <img src="images/yeoman.png" alt="I'm Yeoman"><br> Always a pleasure scaffolding your apps. </p> <p><ang-href="#">Splendid!</a></p> </div> <div> <h4>HTML5 Boilerplate</h4> <p> HTML5 Boilerplate is a professional front-end template for building fast,robust,and adaptable web apps or sites. </p> <h4>Angular</h4> <p> AngularJS is a toolset for building the framework most suited to your application development. </p> <h4>Karma</h4> <p>Spectacular Test Runner for JavaScript.</p> </div> <div> <p>♥ from the Yeoman team</p> </div>
解决方法
首先,包括你的app.js:
<script src="scripts/controllers/main.js"></script> <script src="scripts/app.js"></script>
然后,.config应该在.run之前:
'use strict'; angular.module('angularapp','ui.router' ]) .config(['$stateProvider',$urlRouterProvider) {} ]) .run(['$rootScope',$stateParams) {} ]);
asp.net – __doPostBack无法在回发时呈现
我必须使用GetPostBackEventRefence强制回发,但它第一次工作,在第一次回发后,.NET函数没有呈现…任何想法?
这是我在回发后遗漏的内容:
<script language="javascript" type="text/javascript"> <!-- function __doPostBack(eventTarget,eventArgument) { var theform; if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) { theform = document.Main; } else { theform = document.forms["Main"]; } theform.__EVENTTARGET.value = eventTarget.split("$").join(":"); theform.__EVENTARGUMENT.value = eventArgument; theform.submit(); } // --> </script>
解决方法
只有当ASP认为您的某个控件需要它时,__ doPostback函数才会被放入页面中.
如果您没有使用其中一种,您可以使用:
Page.ClientScript.GetPostBackClientHyperlink(controlName,"")
将功能添加到您的页面
asp.net – 无法弄清楚如何将我的NON-MVC站点从sitemap.xml路由到另一个.aspx页面
我花了几个小时搜索,如果你知道我在哪里可以找到答案,请告诉我.
我试过用
RouteTable.Routes.Add("SitemapRoute",new Route("sitemap.xml",new PageRouteHandler("~/sitemap.aspx")))
解决方法
void Application_Start(object sender,EventArgs e) { RouteTable.Routes.Add(new Route( "sitemap.xml",new PageRouteHandler("~/sitemap.aspx"))); }
但是,您还需要确保ASP.NET处理* .xml文件.默认情况下,* .xml文件将由IIS提供,而不由ASP.NET处理.要确保它们由ASP.NET处理,您可以:
1)在web.config中的system.webServer元素上指定runAllManagedModulesForAllRequests =“true”:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> </modules> </system.webServer>
或2)为.xml文件添加“处理程序映射”:
<system.webServer> <handlers> <add name="xml-file-handler" path="*.xml" type="System.Web.UI.PageHandlerFactory" verb="*" /> </handlers> </system.webServer>
我在一个示例ASP.NET(非MVC)项目中对此进行了测试,并且能够使路由按指定的方式工作.
asp.net – 模型在表单发布到控制器时始终为NULL
@model VisitorPortal.Models.ReinviteVisitorModel @using (Html.BeginForm("CreateMeeting","Home",FormMethod.Post,new { @,role = "form" })) { @Html.AntiForgeryToken() <h3>Reinvitation Details</h3> <div>The information entered below will be sent to the visitors email address @Model.Info.Email</div> <hr /> @Html.ValidationSummary("",new { @}) <div> @Html.LabelFor(m => m.NewMeeting.Title,new { @}) <div> @Html.TextBoxFor(m => m.NewMeeting.Title,new { @}) </div> </div> <div> @Html.LabelFor(m => m.NewMeeting.StartTime,new { @}) <div> @Html.TextBoxFor(m => m.NewMeeting.StartTime,new { @}) </div> </div> <div> @Html.LabelFor(m => m.NewMeeting.EndTime,new { @}) <div> @Html.TextBoxFor(m => m.NewMeeting.EndTime,new { @}) </div> </div> <div> <div> @Html.HiddenFor(m => m.NewMeeting.SubjectId,new { @Value = Model.Info.SubjectId }) <input type="submit"value="Send Invite" /> </div> </div> }
该模型是:
public class Meeting { [Key] public int Id { get; set; } public string SubjectId { get; set; } [required] [display(Name = "Reason for invitation")] public string Title { get; set; } [required] [display(Name = "Start Time")] [DataType(DataType.Time)] public DateTime StartTime { get; set; } [required] [display(Name = "End Time")] [DataType(DataType.Time)] public DateTime EndTime { get; set; } public string Hostemail { get; set; } public string HostMobile { get; set; } } public class MeetingsDBContext: DbContext { public DbSet<Meeting> Meetings { get; set; } } public class ReinviteVisitorModel { public Visitor Info; public Meeting NewMeeting; public List<Meeting> Meetings; }
Controller的行动是:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult CreateMeeting(Meeting meeting) { return RedirectToAction("ReinviteVisitor2",new { visitorId = meeting.SubjectId }); }
我在模型中有字段,例如Id,我期望数据库填充我将在动作CreateMeeting()中编写的内容.是否必须在表单中使用模型中的所有字段?
解决方法
[HttpPost] [ValidateAntiForgeryToken] public ActionResult CreateMeeting(ReinviteVisitorModel model)
或者,您可以使用BindAttribute的Prefix属性从您要发布的表单控件的名称中删除NewMeeting前缀.
public ActionResult CreateMeeting([Bind(Prefix="NewMeeting")]Meeting model)
附注:从隐藏输入中删除新的{@Value = Model.Info.SubjectId},然后在将模型传递给视图之前在GET方法中设置NewMeeting.SubjectId的值.
我们今天的关于asp.net-mvc – 无法弄清楚为什么模型在回发时为null?的分享就到这里,谢谢您的阅读,如果想了解更多关于angularjs – 无法弄清楚为什么我的角度视图是空白的、asp.net – __doPostBack无法在回发时呈现、asp.net – 无法弄清楚如何将我的NON-MVC站点从sitemap.xml路由到另一个.aspx页面、asp.net – 模型在表单发布到控制器时始终为NULL的相关信息,可以在本站进行搜索。
本文标签: