www.91084.com

GVKun编程网logo

asp.net-mvc – 无法弄清楚为什么模型在回发时为null?

9

本文将分享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?

asp.net-mvc – 无法弄清楚为什么模型在回发时为null?

我是ASP.NET MVC的新手,我正在尝试创建一个非常简单的博客类型网站,以此来学习一切是如何工作的.但是,从评论表单发布到无效的模型时我遇到了问题,我无法说明原因.

在博客文章页面上,我有一个“添加注释”链接,它调用一些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模型),这导致了问题.

谢谢您的帮助.

解决方法

昨天也回答了类似的问题.退房: MVC3 – Insert using ViewModel – Object reference not set to an instance of an object

我可以看到的问题是,当发布表单时,会传递Post.ID和CommentID,而您的操作则需要一个类型为“CommentModel”的完整对象.模型绑定器无法将发布数据映射到相应的模型对象中.

angularjs – 无法弄清楚为什么我的角度视图是空白的

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无法在回发时呈现

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控件(例如链接按钮,组合框,通常不会生成提交但需要回发).
只有当ASP认为您的某个控件需要它时,__ doPostback函数才会被放入页面中.

如果您没有使用其中一种,您可以使用:

Page.ClientScript.GetPostBackClientHyperlink(controlName,"")

将功能添加到您的页面

asp.net – 无法弄清楚如何将我的NON-MVC站点从sitemap.xml路由到另一个.aspx页面

asp.net – 无法弄清楚如何将我的NON-MVC站点从sitemap.xml路由到另一个.aspx页面

在搜索谷歌时,MVC网站的唯一解决方案就出现了.我的asp.net 4.0站点不是MVC.我希望对sitemap.xml的请求加载另一个动态.aspx页面,以便我可以动态生成谷歌链接.

我花了几个小时搜索,如果你知道我在哪里可以找到答案,请告诉我.

我试过用

RouteTable.Routes.Add("SitemapRoute",new Route("sitemap.xml",new PageRouteHandler("~/sitemap.aspx")))

解决方法

您的代码是正确的,应该放在Global.asax的Application_Start方法中.例如:

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

asp.net – 模型在表单发布到控制器时始终为NULL

每当我提交表单时,传递给控制器​​的模型都是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()中编写的内容.是否必须在表单中使用模型中的所有字段?

解决方法

您视图中的模型是typeof ReinviteVisitorModel,这意味着自发布ReinviteVisitorModel以来POST方法的签名必须匹配
[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的相关信息,可以在本站进行搜索。

本文标签: