MVC5中使用ReactJS.NET入门

仿QQ皮肤的Winform界面,皮肤可换,界面更炫 找了好久才找到的一款新仿QQ皮肤的Winform界面程序,让你界面从此炫起来,可自定义界面皮肤,可添加皮肤,文件里有源码,使用很方便! 立即下载

CommentModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ReactJS.Models
{
    public class CommentModel
    {
        public string Author { get; set; }
        public string Text { get; set; }
    }
}

HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.UI;
using ReactJS.Models;

namespace ReactJS.Controllers
{
    public class HomeController : Controller
    {
        private static readonly IList<CommentModel> _comments;

        static HomeController()
        {
            _comments = new List<CommentModel>
            {
                new CommentModel
                {
                    Author = "丹尼尔·洛尼格罗",
                    Text = "你好,ReactJS.NET世界!"
                },
                new CommentModel
                {
                    Author = "China Hunt",
                    Text = "这是一个评论"
                },
                new CommentModel
                {
                    Author = "约旦·沃尔克",
                    Text = "这是*另一个*评论"
                },
            };
        }

        public ActionResult Index()
        {
            return View();
        }

        [OutputCache(Location = OutputCacheLocation.None)]
        public ActionResult Comments()
        {
            return Json(_comments, JsonRequestBehavior.AllowGet);
        }

        [HttpPost]
        public ActionResult AddComment(CommentModel comment)
        {
            _comments.Add(comment);
            return Content("Success :)");
        }

        public ActionResult About()
        {
            ViewBag.Message = "你的应用描述页.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "你的联系页.";

            return View();
        }
    }
}

Index.cshtml

@model IEnumerable<ReactJS.Models.CommentModel>

@{
    ViewBag.Title = "Home Page";
}

<div class="row" id="content">

</div>

_Layout.cshtml

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title - My ASP.NET Application</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")

</head>
<body>

    <div class="container body-content">
        @RenderBody()

    </div>
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
    <script src="~/Scripts/react.js"></script>
    <script src="~/Scripts/react-dom.js"></script>
    <script src="~/Scripts/showdown.min.js"></script>
    <script src="~/Scripts/Tutorial.jsx"></script>


</body>
</html>

App_Start文件夹

BundleConfig.cs

using System.Web;
using System.Web.Optimization;

namespace ReactJS
{
    public class BundleConfig
    {
        // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.validate*"));

            // Use the development version of Modernizr to develop with and learn from. Then, when you're
            // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));

            bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
                      "~/Scripts/bootstrap.js",
                      "~/Scripts/respond.js"));

            bundles.Add(new StyleBundle("~/Content/css").Include(
                      "~/Content/bootstrap.css",
                      "~/Content/site.css"));

            bundles.Add(new ScriptBundle("~/bundles/main").Include(
               "~/Scripts/Tutorial.jsx",
               "~/Scripts/showdown.js"
           ));

            BundleTable.EnableOptimizations = true;
        }
    }
}

RouteConfig.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace ReactJS
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Comments",
                url: "comments",
                defaults: new { controller = "Home", action = "Comments" }
            );

            routes.MapRoute(
                name: "NewComment",
                url: "comments/new",
                defaults: new { controller = "Home", action = "AddComment" }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );


        }
    }
}

Tutorial.jsx

var Comment = React.createClass({
  render: function() {
   var converter = new Showdown.converter();
    var rawMarkup = converter.makeHtml(this.props.children.toString());
    return (
      <div className="comment">
        <h2 className="commentAuthor">
          {this.props.author}
        </h2>
        <span dangerouslySetInnerHTML={{__html: rawMarkup}} />
      </div>
    );
  }
});

var CommentList = React.createClass({
  render: function() {
  var commentNodes = this.props.data.map(function (comment) {

      return (
        <Comment author={comment.Author}>
          {comment.Text}
        </Comment>
      );
    });
    return (
      <div className="commentList">
         {commentNodes}
      </div>
    );
  }
});

var CommentForm = React.createClass({
handleSubmit: function(e) {
    e.preventDefault();
    var author = this.refs.author.value.trim();
    var text = this.refs.text.value.trim();
    if (!text || !author) {
      return;
    }
    this.props.onCommentSubmit({Author: author, Text: text});
    this.refs.author.value = '';
    this.refs.text.value = '';
    return;
  },
  render: function() {
    return (
      <form className="commentForm" onSubmit={this.handleSubmit}>
        <input type="text" placeholder="你的名字" ref="author" />
        <input type="text" placeholder="说点什么..." ref="text" />
        <input type="submit" value="Post" />
      </form>
    );
  }
});

var CommentBox = React.createClass({
loadCommentsFromServer: function() {
    var xhr = new XMLHttpRequest();
    xhr.open('get', this.props.url, true);
    xhr.onload = function() {
      var data = JSON.parse(xhr.responseText);
      this.setState({ data: data });
    }.bind(this);
    xhr.send();
  },
  handleCommentSubmit: function(comment) {
  var comments = this.state.data;
    var newComments = comments.concat([comment]);
    this.setState({data: newComments});

   var data = new FormData();
    data.append('Author', comment.Author);
    data.append('Text', comment.Text);

    var xhr = new XMLHttpRequest();
    xhr.open('post', this.props.submitUrl, true);
    xhr.onload = function() {
      this.loadCommentsFromServer();
    }.bind(this);
    xhr.send(data);
  },
getInitialState: function() {
    return {data: []};
  },

   componentDidMount: function() {
    this.loadCommentsFromServer();
    window.setInterval(this.loadCommentsFromServer, this.props.pollInterval);
  },
  render: function() {
    return (
      <div className="commentBox">
        <h1>Comments</h1>
        <CommentList data={this.state.data} />
         <CommentForm onCommentSubmit={this.handleCommentSubmit} />
      </div>
    );
  }
});
ReactDOM.render(
 <CommentBox url="/comments" submitUrl="/comments/new" pollInterval={2000} />,
  document.getElementById('content')
);

运行结果如图:

这里写图片描述


这里写图片描述

Asp.net MVC + Backbone + React DEMO 自己写的一个简单的 React+Backbone 的 .net MVC 程序 DEMO。以供学习参考 立即下载

相关推荐

SAP CO-PA数据传送避坑指南:销售开票与FI/MM记账的日常配置实操(含KEKF/KE4I/KEI2)

本文深入解析SAP CO-PA数据传送中的常见配置问题,特别是销售开票与FI/MM记账环节的实操避坑指南。通过KEKF/KE4I/KEI2等关键配置点的详细说明,帮助用户避免数据失真和重复记录,提升获利能力分析的准确性。文章结合实战案例,揭示官方文档未提及的'数据黑洞'形成机制,为SAP顾问提供实用的排雷手册。

weixin_26905487的博客 390

ReactJS入门(一)—— 初步认识React

它返回了一个p标签,其中的内容是 this.props.abc 和 this.props.name,这里的 this 指的是组件 Component1 本身,因此比如 this.props.name 获取到的便是组件 Component1 自身的属性 name 的值(abc 和 name 的值我们都在 Component2 中进行了定义)。2. React很擅长于处理组件化的页面,在页面上搭组件的形式有点像搭乐高一样,因此用上React的项目需求常规为界面组件化。isClick :!

精选资讯文章 6211

LVGL字体优化实战:如何将中文字库放到外部SPI Flash并动态加载(节省内部RAM)

本文详细介绍了LVGL在嵌入式UI开发中如何通过外部SPI Flash存储中文字库并动态加载,以节省内部RAM资源。通过对比不同存储介质和字库格式,提供多种实现方案及性能优化技巧,帮助开发者在资源受限设备上实现高效的中文显示。

weixin_28693683的博客 340

MVC4中使用React.js入门

HomeController.csusing System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc;namespace ReactJSExamples.Controllers { public class HomeController : Cont

极客神殿 1693

手把手教你设计2bit反射型超表面:从单patch扫参到pin管配置全流程

本文提供了一份2bit反射型超表面设计的完整工程实践指南。从单贴片谐振器的参数化扫描与“270度法则”应用,到PIN二极管等效电路模型的获取与集成,再到利用参数化扫描高效仿真四种工作状态,手把手指导读者完成从单元设计到阵列布局、偏置线集成及加工考量的全流程,旨在帮助射频工程师将概念转化为可加工测试的实体模型。

java5的博客 1019

FRM(Financial Risk Manager,金融风险管理师)知识点总结归纳

FRM知识点总结(150字) FRM考试分为两级:一级侧重基础理论和工具,包含风险管理基础、定量分析、金融市场产品、估值与风险建模四大模块,涵盖风险管理框架、统计学方法、衍生品定价及VaR计算等核心内容。二级聚焦实际应用,分为市场风险、信用风险、操作风险、流动性风险、投资管理和市场前沿六大模块,深入探讨高级风险度量技术(如极值理论)、信用风险模型、巴塞尔协议及新兴风险议题。考试体系贯穿"风险识别→度量→管理→监管"逻辑主线,强调定量分析与实务案例的结合,覆盖传统金融风险和区块链、ESG等

极客神殿 1440

WinForm 使用 ReactiveUI

Winform 使用MVVM 框架 ReactiveUI

qq_39505223的博客 1871

Kali Linux渗透测试:蚁剑(AntSword)三种安装方法与避坑指南

WebShell管理是渗透测试与网络安全攻防演练中的关键技术环节,它允许安全人员在获得初步访问权限后,对目标系统进行文件管理、命令执行和数据库操作等深度控制。其核心原理是通过在Web服务器上植入特定脚本,建立一条隐蔽的远程管理通道。在实战中,一个高效、稳定的WebShell管理工具能极大提升后渗透阶段的工作效率与成功率。蚁剑(AntSword)作为一款功能强大的国产开源工具,凭借其插件化架构和图形化界面,成为众多安全研究人员的首选。本文将聚焦于如何在渗透测试专用操作系统Kali Linux上部署蚁剑,详细对

weixin_34413103的博客 413

Asp.net MVC 使用 ReactJS

新建项目 新建MVC4 项目 安装ReactJS.NET 新建ReactJSController using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace ReactJsDemo.Co...

anfeiqu4953的博客 704

使用TEA5767和stm32制作一台数字FM收音机

本节我们来使用stm32控制一款集成收音机芯片TEA5767,来制作一台FM收音机。 TEA5767是一款低功耗立体声收音IC,接收频率76MHz~108MHz(适应日本/美国/欧洲各FM频段选择)并可以使用软件进行静音和消除噪音。 主要电性能指标:工作电压:2.5V~5.0V,工作电流10mA,立体声分离度30dB,信噪比60dB,输出信号电平75mV。支持I2C总线通信、3-wire总线。 1)硬件设计 TEA5767芯片外围需要搭配较多的电阻、电容、电感、晶振等器件,而且高频电路的PCB设

小白白学电子 1万+

DenseNet训练实践

在Cifar10上训练DenseNet,复现DenseNet论文的结果是后面两篇分析工作的基础,因此本系列的第一篇,将首先讨论深度学习的训练过程中的几个方面: 1. 数据集 1.1 Cifar10数据集 Cifar10数据集有6万张32X32的图片,是一个小型的数据集,但数据的复杂度足够,下图来自DenseNet论文,可以看出,不用数据增强的话,ResNet的正确率也很难超过90%,因而足以用来验...

一蓑烟雨任平生 1万+

为什么winform界面都非常丑?我来为你揭密背后的原因。

背后到底有哪些原因?相比之下,一些现代的界面技术,如 Vue.js、Angular 等,拥有庞大的社区和丰富的资源,开发人员可以很容易地找到各种解决方案和设计灵感。相比之下,一些现代的界面技术,如 React Native、Flutter 等,提供了更加丰富的自定义选项,使得开发人员可以更加轻松地实现个性化的界面效果。总之,虽然 WinForm 界面常常被认为丑,但通过采取一些改进措施,结合现代设计理念,以及微软和社区的共同努力,相信 WinForm 界面的设计水平能够得到提高,为用户带来更好的体验。

2401_82616673的博客 2018

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件概述(ArkSIM集成开发环境 (IDE))

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件详述(ArkSIM集成开发环境 (IDE))

916

ASP.NET与React结合实战教程:基于AspNetReactSamples

ASP.NET与React结合实战教程:基于AspNetReactSamples 项目介绍 AspNetReactSamples 是一个由Jon P Smith维护的GitHub仓库,它提供了多种示例项目,展示了如何在ASP.NET(包括ASP.NET Core 1.0.0及MVC5)环境中集成、构建并单元测试React前端应用。这些模板专为希望将现代JavaScript库引入经典.NET开发环境...

gitblog_00004的博客 975

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ReactJS.NET 之 Demo 初探

  ReactJS.NET 是专对 .NET 平台开发者设计,让我们不只可以在前端去Render出页面,也可以在Server端去Render页面。开发 ReactJS 可以用一般JS 库,也可以通过类似XML的JSX 编写方式去开发。官方网站  http://reactjs.net/  ,已经可以支持 ASP.NET 5  !   参照入门教程,首先我们创建一个空的 ASP.NET MVC 4 项...

weixin_34214500的博客 776

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ReactJS.NET 与 ASP.NET Core 集成开发教程

ReactJS.NET 是一个让 React 与 .NET 平台无缝集成的库,特别适合在 ASP.NET Core 应用中使用 React 构建用户界面。本教程将详细介绍如何在 ASP.NET Core MVC 项目中集成 ReactJS.NET,并构建一个完整的评论组件。 ## 环境准备 ### 开发工具要求 - Visual Studio 2019 或更高版本 - .NET Core 3....

gitblog_00272的博客 521

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

在ASP.NET MVC项目中使用React

(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。) 题记:最近在开发钉钉的微应用,考虑到性能和UI库的支持,遂采用了React来开发前端。 目前我的项目是基于ABP框架的ASP.NET MVC/WEB API作为后端,AngularJS作为前端。但是发现钉钉官方的UI(SaltUI)是基于React封装的,另外AmazeUI的Touch版本也是React封装...

weixin_34001430的博客 1053

asp.net mvc4 集成reactjs

创建一个空的mvc4项目 安装 React.Web.Mvc4 Nuget包: Install-Package React.Web.Mvc4到这里下载starter kit包,解压后取得react.js, react-dom.js文件添加到项目里 添加首页 Home->Index@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name

seeklanguage的专栏 2485

从MVC到Razor页面

介绍 使用ASP.NET Core 2,Microsoft为我们提供了创建Web应用程序的MVC(Model-View-Controller)方法的全新替代方案。微软将其命名为“剃刀页”,尽管采用不同的方法,但在某些方面仍然很熟悉。 本文将展示一个场景,其中Razor Pages用于生产一个小型电子商务网站,并在Facebook的React / ReactJS.NET帮助下,为其提供基

筱乐云博客 1万+

初探ReactJS.NET 开发

ReactJS通常也被称为"React",是一个刚刚在这场游戏中登场的新手。它由Facebook创建,并在2013年首次发布。Facebook认为React在处理SPA问题上可以成为Angular的替代品,因此如果你认为Angular和React这两种框架是竞争对手,那你的理解就对了。不过,与Angular相比,React最大的不同之处在于,它是一个更高效、具有更高性能、速度更快的类库。下图展示了...

weixin_30847939的博客 538

在 .NET Core 5 中集成 Create React app

翻译自 Camilo Reyes 2021年2月22日的文章《Integrate Create React app with .NET Core 5》[1]本文演示了如何将 Crea...

dotNET跨平台 590

ASP.NET 与 React 集成示例项目介绍

ASP.NET 与 React 集成示例项目介绍 AspNetReactSamples 是一个开源项目,旨在展示如何在 ASP.NET Core 和 ASP.NET MVC5 应用程序中集成、构建和测试 React 前端。该项目主要使用 C# 作为后端编程语言,前端则采用了 JavaScript 和 React 相关技术。 项目基础介绍 该项目包含三个主要项目: ReactJsNet_MVC5:...

gitblog_00952的博客 729
上一篇: nginx-1.12.1服务器的配置文件
下一篇: OpenSSL命令系列
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值