یک نکته تکمیلی
برای نمایش html دریافت شده در markup بصورت زیر عمل کنید
@((MarkupString)@HotelRoomModel.Details)
@((MarkupString)@HotelRoomModel.Details)
@Html.ActionLink("text", "Index", "Home")
@Html.ActionLink("text", "Index", "Home")
@Html.ActionLink("text", result: MVC.Home.Index())
@Html.ActionLink("text", MVC.Home.ActionNames.Index, MVC.Home.Name)
@Url.Action(result: MVC.Article.Delete())
@Url.Action("Delete", "Article")
@{ Html.RenderPartial("_ViewPage1"); }
@{ Html.RenderPartial(MVC.Home.Views._ViewPage1); }
return PartialView(Views._ViewPage1);
return RedirectToAction(actionName: "Index", controllerName: "Menu");
return RedirectToAction(actionName: MVC.Menu.ActionNames.Index, controllerName: MVC.Menu.Name);
return RedirectToAction(result: MVC.Menu.Index());
return PartialView("~/Views/CommentsArchive/_LatestCommentsInfo.cshtml", data);
return PartialView(MVC.CommentsArchive.Views._LatestCommentsInfo, data);
<img src="@Links.Content.Images.arrow_right_png" alt="arrow" /> <script src="@Links.Scripts.jquery_1_5_1_min_js" type="text/javascript"></script>
Html.ActionLink(linkText: "عنوان", actionName: "Index", controllerName: "Comments", routeValues: new { userName = @Model.FriendlyName }, htmlAttributes: null))
Html.ActionLink(linkText: "عنوان", result: MVC.Comments.Index(userName: @Model.FriendlyName) htmlAttributes: null))
ReactDOM.render(<App />, document.getElementById('root'));
// List.js import React, { Component } from 'react'; import { ActionButton } from './ActionButton'; export class List extends Component { constructor(props) { super(props); this.state = { items: [ { id: 1, title: "Item 1" }, { id: 2, title: "Item 2" }, { id: 3, title: "Item 3" }, { id: 4, title: "Item 4" }, { id: 5, title: "Item 5" }, ] }; } reverse = () => { this.setState({ items: this.state.items.reverse() }); } render() { console.log("Render List Component"); return ( <div className="list-container"> <ActionButton callback={this.reverse} /> <ul> {this.state.items.map(item => { return <li key={item.id}> {item.title} </li> })} </ul> </div> ); } } // ActionButton.js import React, { Component } from 'react'; export class ActionButton extends Component { render() { console.log("Render ActionButton Component"); return ( <button onClick={this.props.callback}>Click me</button> ); } }
import React from 'react'; import './App.css'; import { List } from './List'; function App() { console.log("Render App Component"); return ( <div className="App"> <h1>Reconciliation Process</h1> <List /> </div> ); } export default App;
Render App Component Render List Component Render ActionButton Component
<ul id="list"> {this.state.items.map(item => { return <li key={item.id}> {item.title} </li> })} </ul>
document.getElementById("list").classList.add("message")
همانطور که مشخص است کد فوق کلاسی با نام message را به عنصر ul اضافه کرده است:
.message { border: 1px solid green; padding: 2rem; }
اکنون وقتی بر روی دکمه Click me کلیک کنیم، محتوای درون کامپوننت فوق تغییر پیدا میکند، اما عنصر ul همچنان دارای کلاس message است؛ دلیل آن نیز همانطور که عنوان شد این است که React محتوای تولید شده توسط کامپوننت List را با Virtual DOM خودش مقایسه میکند و چون از لحاظ ساختار DOM با هم برابر هستند تغییری در ساختار خروجی کامپوننت ایجاد نمیکند و فقط قسمتهایی را که تغییر کردهاند، بروزرسانی خواهد کرد.
اکنون کامپوننت فوق را اینگونه تغییر خواهیم داد:
import React, { Component } from 'react'; import { ActionButton } from './ActionButton'; export class List extends Component { constructor(props) { // as before } reverse = () => { this.setState({ items: this.state.items.reverse(), wrapInDiv: true }); } generateElement = () => { const list = <ul id="list"> {this.state.items.map(item => { return <li key={item.id}> {item.title} </li> })} </ul>; return this.state.wrapInDiv ? <div>{list}</div> : list; } render() { console.log("Render List Component"); return ( <div className="list-container"> <ActionButton callback={this.reverse} /> {this.generateElement()} </div> ); } }
public class ApplicationUser : IdentityUser { public string Email { get; set; } public string ConfirmationToken { get; set; } public bool IsConfirmed { get; set; } }
private string CreateConfirmationToken() { return ShortGuid.NewGuid(); } private void SendEmailConfirmation(string to, string username, string confirmationToken) { dynamic email = new Email("RegEmail"); email.To = to; email.UserName = username; email.ConfirmationToken = confirmationToken; email.Send(); } // // POST: /Account/Register [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { string confirmationToken = CreateConfirmationToken(); var user = new ApplicationUser() { UserName = model.UserName, Email = model.Email, ConfirmationToken = confirmationToken, IsConfirmed = false }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { SendEmailConfirmation(model.Email, model.UserName, confirmationToken); return RedirectToAction("RegisterStepTwo", "Account"); } else { AddErrors(result); } } // If we got this far, something failed, redisplay form return View(model); }
private bool ConfirmAccount(string confirmationToken) { ApplicationDbContext context = new ApplicationDbContext(); ApplicationUser user = context.Users.SingleOrDefault(u => u.ConfirmationToken == confirmationToken); if (user != null) { user.IsConfirmed = true; DbSet<ApplicationUser> dbSet = context.Set<ApplicationUser>(); dbSet.Attach(user); context.Entry(user).State = EntityState.Modified; context.SaveChanges(); return true; } return false; } [AllowAnonymous] public ActionResult RegisterConfirmation(string Id) { if (ConfirmAccount(Id)) { return RedirectToAction("ConfirmationSuccess"); } return RedirectToAction("ConfirmationFailure"); }
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { var user = await UserManager.FindAsync(model.UserName, model.Password); if (user != null && user.IsConfirmed) { await SignInAsync(user, model.RememberMe); return RedirectToLocal(returnUrl); } else { ModelState.AddModelError("", "Invalid username or password."); } } // If we got this far, something failed, redisplay form return View(model); }
To: @ViewBag.To From: YOURNAME@gmail.com Subject: Confirm your registration Hello @ViewBag.UserName, Please confirm your registration by following the link bellow. @Html.ActionLink(Url.Action("RegisterConfirmation", "Account", new { id = @ViewBag.ConfirmationToken }), "RegisterConfirmation", "Account", new { id = @ViewBag.ConfirmationToken }, null)
@{ Layout = null; /* Overrides the Layout set for regular page views. */ }
مشاهده فرم ویرایش | SampleController:Edit | ✓ |
مشاهده محتویات دراپ دان | SampleController:GetData | ✓ |
اگر خواستید از موردی صرفنظر کند، rule id فوق را به فایل codeql-config.yml، اضافه کنید.