---
title: "using extjs Create Login page and add,edit,update record from database."  
description: "first I have create a  UserLogin TableCREATETABLE[dbo][UserLogin][UserId][int]IDENTITY11PRIMARYKEY[UserName][varchar]100NULL,[UserEmail][varchar]100NU"  
author: "Anonymous User"  
published: 2016-10-04  
updated: 2016-10-04  
canonical: https://www.mindstick.com/blog/11213/using-extjs-create-login-page-and-add-edit-update-record-from-database  
category: "sencha cmd"  
tags: ["sencha"]  
reading_time: 7 minutes  

---

# using extjs Create Login page and add,edit,update record from database.

first I have create a UserLogin Table

```
CREATE TABLE [dbo].[UserLogin](     [UserId] [int] IDENTITY(1,1) PRIMARY KEY,     [UserName] [varchar](100) NULL,     [UserEmail][varchar](100) NULL,     [PhoneNumber][varchar](100) NULL,     [Address] [varchar](100) NULL,     [Password] [varchar](100) NULL, ) 
```

Create a [layout View](https://www.mindstick.com/forum/155794/how-to-create-layout-view-in-asp-dot-net-mvc-razor-view) layout.cshtml

```
LAYOUT.Cshtml

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    <link href="~/Content/bootstrap.min.css" rel="stylesheet" />
    <script src="~/Scripts/jquery-2.2.3.min.js"></script>
    <script src="~/Scripts/bootstrap.min.js"></script>
    <script src="~/ext-6.0.2/build/ext-all.js"></script>
<link href="~/ext-6.0.2/build/classic/theme-neptune/resources/theme-neptune-all.css" rel="stylesheet" />
    <link href="~/Content/Site.css" rel="stylesheet" />
    <script src="~/Scripts/site.js"></script>
</head>
<body>

<!--/.navbar -->
    <nav class="navbar navbar-inverse sidebar" role="navigation">
    <div class="container-fluid">
		<!-- Brand and toggle get grouped for better mobile display -->
		<div class="navbar-header">
			<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-sidebar-navbar-collapse-1">
				<span class="sr-only">Toggle navigation</span>
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
			</button>
			<a class="navbar-brand" href="#">MindStick</a>
		</div>
		<!-- Collect the nav links, forms, and other content for toggling -->
		<div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1">
			<ul class="nav navbar-nav">
				<li class="active"><a href="#">Home<span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-home"></span></a></li>
				<li ><a href="#" id="UserProfile" class="UserProfile">Users<span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-user"></span></a></li>

				<li class="dropdown">
					<a href="#" class="dropdown-toggle" data-toggle="dropdown">Settings<span class="caret"></span><span style="font-size:16px;" class="pull-right hidden-xs showopacity glyphicon glyphicon-cog"></span></a>
					<ul class="dropdown-menu forAnimate" role="menu">
						<li><a href="#">Action</a></li>
						<li><a href="#">Help</a></li>
						<li><a href="#">LogOut</a></li>
					</ul>
				</li>
			</ul>
		</div>
	</div>
</nav>
<div class="main" id="page">
@RenderBody()

</div>

</body>
</html>
```

\

Create a index view where user can login and go to **[Dashboard](https://answers.mindstick.com/qa/34007/reports-and-dashboard-limitations-in-salesforce).**

```
Index.cshtml

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
      <script src="~/ext-6.0.2/build/ext-all.js"></script>
<link href="~/ext-6.0.2/build/classic/theme-neptune/resources/theme-neptune-all.css" rel="stylesheet" />
<script src="~/App/Login.js"></script>
 </head>
<body>
    <div>

    </div>
</body>
</html>
```

\

It is user.js file which work for user login page.

```
Login.js

/// <reference path="../ext-6.0.2/build/ext-all.js" />

Ext.onReady(function(){
    var login = new Ext.FormPanel({
        labelWidth:100,
        url: 'api/values',
        header : false,
        frame:false,
        title:'Login',
        defaultType: 'textfield',
        bodyStyle: 'background:url(images/login.png) no-repeat;  padding:20px;',
        monitorValid:true,

        items:[{
            fieldLabel:'UserID',
            name: 'UserEmail',
            width: 400,
            fieldStyle: 'background-color: #fff; background-image: none;',
            allowBlank:false
        },{
            fieldLabel:'Password',
            name: 'Password',
            inputType: 'password',
            width:400,
            allowBlank:false
        }],

        // All the magic happens after the user clicks the button
        buttons:[{
            text:'Login',
            formBind: true,
            // Function that fires when user clicks the button
            handler:function(){
                login.getForm().submit({
                    method:'POST',
                    waitTitle:'Connecting',
                    waitMsg:'Sending data...',
                    success: function () {
                        Ext.Msg.alert('Status', 'Login Successful!', function(btn, text){
                            if (btn == 'ok'){
                                var redirect = 'Home/dashboard';
                                window.location = redirect;
                            }
                        });
                    },

                    failure:function(form, action){
                        Ext.Msg.alert('Status', 'Login failed!');
                    }
                });
            }
        }]
    });

    var win = new Ext.Window({
        title: 'Admin Login',
        layout:'fit',
        width:450,
        height:200,
        closable: true,
        resizable: false,
        border: false,
        buttonAlign: 'center',
        items: [login]
    });
    win.show();
});
```

[User Login](https://www.mindstick.com/forum/549/what-is-the-benfit-of-given-the-microsoft-account-when-we-create-a-user-login-in-windows-8) InterFace. Here [user input](https://www.mindstick.com/forum/159624/setting-an-enum-from-user-input) userid and [password](https://www.mindstick.com/blog/118/retriving-user-password-by-using-stored-procedure-in-asp-dot-net) click to login.

```

```

```
public bool Post(UserLogin obj)
        {
            bool success;

            var result = db.UserLogin.FirstOrDefault(x => x.UserEmail == obj.UserEmail && x.Password == obj.Password);
            if (result != null)
            {
                success = true;

            }
            else
            {
                 success =false;

            }
            return success;
        }
```

\

Login success click ok go to dashboard page.

```

```

```


Dashboard.cshtml
 @{
    ViewBag.Title = "dashboard";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<script src="~/App/dashboard.js"></script>
<script src="~/App/Users.js"></script>
<style>
.add{
  background: url('http://www.famfamfam.com/lab/icons/silk/icons/add.png') no-repeat;
}
.delete{
  background: url('http://www.famfamfam.com/lab/icons/silk/icons/delete.png') no-repeat;
}
</style>
```

It is dashboard.js file which is work for Dashboard page.

```
Dashboard.js
Ext.define('PagePanel', {
    extend: 'Ext.panel.Panel',
    height: '100%',
    renderTo: Ext.getBody(),
    title: 'Dashboard',
    layout: {
        type: 'table',
        columns: 1,
        tableAttrs: {
            style: {
                width: '100%', height: '100%'
            }
        },
        tdAttrs: {
            style: { border: '1px solid black' }
        }
    },
    listeners : {
        afterrender : function(panel) {
            var header = panel.header;
            header.setHeight(51);
        }
    },

    initComponent: function () {
        this.callParent(arguments);
            this.add({
                xtype: 'container',
                style: { height: '100%' }
            });

    }
});

Ext.onReady(function () {
    Ext.create('PagePanel');
});
```

It is user.js file use for user list where we can create, edit, [update](https://www.mindstick.com/forum/265/ajax-update-panel),[delete](https://www.mindstick.com/forum/33620/how-to-delete-record-from-list-in-mvc-using-ajax) record.

```
User.js

Ext.define('MyApp.model.User', {
    extend: 'Ext.data.Model',
    fields: ['UserId', 'UserName', 'UserEmail', 'PhoneNumber', 'Address', 'Password'],

});

var Store=Ext.define('MyApp.store.Users', {
    extend: 'Ext.data.Store',
    model: 'MyApp.model.User',
    proxy: {
        type: 'ajax',
        url: '/api/dashboard',
        reader: {
            type: 'json',
            root: 'Users',
            totalProperty: 'TotalCount'
        }
    },
    remoteSort: true,
    sorters: [{
        property: 'UserName',
        direction: 'asc'
    }],
    autoLoad: { start: 0, limit: 5 },
    pageSize: 5,
});

Ext.define('MyApp.controller.Users', {
    extend: 'Ext.app.Controller',
    refs: [
        {
            ref: 'UserGrid',
            selector: 'UserGrid'
        },
        {
            ref: 'DelUserBtn',
            selector: 'UserGrid button[action=deleteUser]'
        }

    ],

    init: function () {
        this.control({
            'UserGrid': {
                itemdblclick: this.onUserGridItemDblClick,
                selectionchange: this.onUserGridSelectionChange
            },
            'UserGrid button[action=addUser]': {
                click: this.onAddUserClick
            },
            'UserGrid button[action=deleteUser]': {
                click: this.onDelUserClick
            },
            'UserForm button[action=saveUser]': {
                click: this.onSaveUserClick
            }
        });
    },
    onDelUserClick: function (button) {
        var grid = button.up('grid'),
    		selection = grid.getSelectionModel().getSelection();
        Ext.Array.each(selection, function (model, index) {
            Ext.Ajax.request({
                url: '/api/dashboard/'+ model.data.UserId,
                method: 'DELETE',
                success: function () {
                    model.destroy();
                },
                failure: function () {

                }
            });
        });
        grid.store.load();
    },

    onUserGridSelectionChange: function (grid, selected) {
        this.getDelUserBtn().setDisabled(selected.length === 0);
    },

    onUserGridItemDblClick: function (grid, record, item) {
        this.showUserForm(record);
    },

    onAddUserClick: function () {
        var newUser = Ext.create(MyApp.model.User);

        this.showUserForm(newUser);
    },

    showUserForm: function (model) {
        var userWin = Ext.create('MyApp.view.UserForm'),
    		form = userWin.down('form');

        form.loadRecord(model);
        userWin.show();
    },

    onSaveUserClick: function (button) {
        var self = this;
        var form = button.up('form'),
    		win = form.up('window'),
    		data = form.getValues(),
    		user = form.getRecord();
        Ext.Ajax.request({
            url: '/api/dashboard',
            method: 'POST',
            jsonData:form.getValues(),
            success: function () {
                self.getUserGrid().store.load();
            },
            failure: function() {

            }
        });

        win.destroy();
    }
});

Ext.define('MyApp.view.UserForm', {
    extend: 'Ext.window.Window',
    xtype: 'UserForm',
    modal: true,
    layout: 'fit',
    height: 300,
    width: 400,
    title: 'UserForm',
    items: [
		{
		    xtype: 'form',
		    bodyPadding: 5,
		    items: [
				{
				    xtype: 'fieldset',
				    title: 'User Info',
				    defaults: {
				        xtype: 'textfield',
				        labelWidth: 100,
				        width: 300
				    },
				    items: [
                        {
                            name: 'UserId',
                            hidden: true
                        },
						{
						    fieldLabel: 'Name',
						    name: 'UserName',
						    sortable : true,
						},
						{
						    fieldLabel: 'Email',
						    sortable: false,
						    name: 'UserEmail'
						},
					    {
					        fieldLabel: 'Phone',
					        sortable: false,
					        name: 'PhoneNumber'
					    },
						{
						    fieldLabel: 'Address',
						    sortable: false,
						    name: 'Address'
						},
					    {
					        fieldLabel: 'Password',
					        name: 'Password',
					        sortable: false,
					    }
				    ]
				}
		    ],
		    buttons: [
				{
				    text: 'Save',
				    action: 'saveUser'
				}
		    ]
		}
    ]
});

Ext.define('MyApp.view.UserGrid', {
    extend: 'Ext.grid.Panel',
    xtype: 'UserGrid',
    title: 'Users',
    store: 'Users',
    multiSelect: true,
    utoScroll: true,
    listeners: {
        beforeclose: function (win) {
        Ext.currentApp = false;


    }
    }
    ,
    columns: [
        { text: 'Name', dataIndex: 'UserName', flex: 1 },
        { text: 'Email', dataIndex: 'UserEmail', flex: 1 },
        { text: 'Phone', dataIndex: 'PhoneNumber', flex: 1 },
           { text: 'Address', dataIndex: 'Address', flex: 1 },
              { text: 'Password', dataIndex: 'Password', flex: 1 }
    ],
    tbar: [
		{
		    text: 'Add',
		    iconCls: 'add',
		    action: 'addUser'
		},
		{
		    text: 'Delete',
		    iconCls: 'delete',
		    action: 'deleteUser',
		    disabled: true
		}
    ],
    bbar: [{
        xtype: 'pagingtoolbar',
        store: 'Users',
        displayInfo: true,
        displayMsg: 'Displaying {0} to {1} of {2} &nbsp;records ',
        emptyMsg: "No records to display&nbsp;"

    }],

    height:820,
    width: 400,
    closable: true,
    renderTo: Ext.getBody()

});

Ext.onReady(function () {
    Ext.get('UserProfile').on('click', function (e, t) {

        if (Ext.currentApp) {
            Ext.Msg.alert('Application Alert', 'window is already open !', function (btn, text) {
                if (btn == 'ok') {
                    return;
                }
            });
            return;
        }

        Ext.currentApp = new Ext.application({
            name: 'MyApp',
            height: 1000,
            width: '100%',
            controllers: [
                'Users'
            ],
            stores: [
                'Users'
            ],
            launch: function () {
                Ext.create('Ext.panel.Panel', {
                    layout: 'fit',
                    autoScroll: true,
                    renderTo: 'container-1010-innerCt',
                    items: [
                        {
                            xtype: 'UserGrid'
                        }
                    ]
                });
            }

        });
    });
});
```

**This is dashboard page [output](https://www.mindstick.com/forum/161319/how-does-the-print-function-handle-output-in-python)**

```

```

**This method get userlist . and we can use paging and shorting.**

```
public class ModelList
    {
        public IEnumerable<UserLogin> Users { get; set; }
        public int TotalCount { get; set; }
    }
public ModelList Get(int start, int limit, string sort)
        {

            ModelList result = new ModelList();
            var data = db.UserLogin.AsQueryable();
            result.Users = data.OrderBy(x => x.UserName).Skip(start).Take(limit).ToList();
            result.TotalCount = data.Count();
            return result;
        }
```

**This is dashboard user list output.**

```

```

**This is add new user form output.**

```

```

This is edit user form Output.

```

```

This [method](https://www.mindstick.com/forum/166/webservice-method) use for add,update user.

```
public void Post(UserLogin obj)
        {
            var original = db.UserLogin.Find(obj.UserId);
            if (original != null)
            {
                original.UserName = obj.UserName;
                original.UserEmail = obj.UserEmail;
                original.PhoneNumber = obj.PhoneNumber;
                original.Password = obj.Password;
                original.Address = obj.Address;
            }
            else
            {
                db.UserLogin.Add(obj);
            }

            db.SaveChanges();
        } 
```

This method use for delete user.d\

```
public void Delete(int id)
        {
            var original = db.UserLogin.Find(id);
            if (original != null)
            {
                db.UserLogin.Remove(original);
            }

            db.SaveChanges();
        }
```

Thanks.\
\
\

---

Original Source: https://www.mindstick.com/blog/11213/using-extjs-create-login-page-and-add-edit-update-record-from-database

Copyright © MindStick Software Pvt. Ltd. This Markdown version is provided for developers, AI systems, and offline reading.
