asp.net mvc - C# How to initilization a variable in class? -
i'm creating billing address user shipping including (first name, last name, address 1, address 2...) based on mvc music store project
[httppost]     public actionresult addressandpayment(formcollection values)     {         var order = new salesorderheader();         var order1 = new salesorderdetail();         tryupdatemodel(order);         try         {             if (string.equals(values["promocode"], promocode, stringcomparison.ordinalignorecase) == false)             {                 return view(order);             }             else             {                 order.accountnumber = user.identity.name;                 order.orderdate = datetime.now;                 order.address.addressline1 = values["addressline1"];                 order.address.addressline2 = values["addressline2"];                 order.address.city = values["city"];                  //save order                 bikedbs.salesorderheaders.add(order);                 bikedbs.savechanges();                 //process order                  var cart = shoppingcart.getcart(this.httpcontext);                 cart.createorder(order);                 //cart.createorder(order1);                  return redirecttoaction("complete", new {id = order.salesorderid });             }         }         catch         {             //invalid - redisplay errors             return view(order);         }   }
may have ask dump question? initial order.address variable? address string type. updated code following metioned. based on mvc music store project , created new app using adventurework2012 db. here view:
<h2>address , payment</h2>     <fieldset>         <legend>shipping information</legend>         @html.displaynamefor(model => model.customer.person.firstname): @html.textbox("firstname") <br />         @html.displaynamefor(model => model.customer.person.lastname):  @html.textbox("lastname") <br />         @html.displaynamefor(model => model.address.addressline1): @html.textbox("addressline1") <br />         @html.displaynamefor(model => model.address.addressline2): @html.textbox("addressline2") <br />         @html.displaynamefor(model => model.address.city): @html.textbox("city") <br />        </fieldset>   and address.cs:
public partial class address     {         public address()         {             this.salesorderheaders = new hashset<salesorderheader>();             this.salesorderheaders1 = new hashset<salesorderheader>();         }          public int addressid { get; set; }         public string addressline1 { get; set; }         public string addressline2 { get; set; }         public string city { get; set; }         public int stateprovinceid { get; set; }         public string postalcode { get; set; }         public system.guid rowguid { get; set; }         public system.datetime modifieddate { get; set; }          public virtual stateprovince stateprovince { get; set; }         public virtual icollection<salesorderheader> salesorderheaders { get; set; }         public virtual icollection<salesorderheader> salesorderheaders1 { get; set; }     }      
in c# string null if not initialized.
in mvc music store project, can follow code:
the addressandpayment view shows shipping information has helper @html.editorformodel() , view model of type mvcmusicstore.models.order.
following class name see properties exposed in form.
and 1 of properties in fact address written as
[required(errormessage = "address required")] [stringlength(70)] public string address { get; set; }   as action accepting formcollection instead of model, need do:
order.address = values["address"];   updated new code on question
there's 3 small mistakes code:
1 - code using tryupdatemodel , can't use complex types (your new address object complex object , not primitive 1 (string, int, etc))
2 - because of point 1, need comment out tryupdatemodel , instead, pass order input public actionresult addressandpayment(order order, formcollection values)
3 - in view, rendering new properties @html.textbox("addressline1") explicit name of <input> addressline1 witch it's wrong model, should address.addressline1.
to fix this, use helper editorfor , use like:
@html.displaynamefor(model => model.customer.person.firstname):  @html.editorfor(model => model.customer.person.firstname) <br />  @html.displaynamefor(model => model.customer.person.lastname):   @html.editorfor(model => model.customer.person.lastname) <br />  @html.displaynamefor(model => model.address.addressline1):  @html.editorfor(model => model.address.addressline1) <br />  @html.displaynamefor(model => model.address.addressline2):  @html.editorfor(model => model.address.addressline2) <br />  @html.displaynamefor(model => model.address.city):  @html.editorfor(model => model.address.city) <br />   this create <input> like
<input class="text-box single-line" id="address_addressline1" name="address.addressline1" type="text" value="">   instead 1 have:
<input id="addressline1" name="addressline1" type="text">   now, default action, work out of box, without need updated, when save order, have fields form in order object
    [httppost]     public actionresult addressandpayment(order order, formcollection values)     {         try         {             if (string.equals(values["promocode"], promocode,                 stringcomparison.ordinalignorecase) == false)             {                 return view(order);             }             else             {                 order.username = user.identity.name;                 order.orderdate = datetime.now;                  //save order                 storedb.orders.add(order);                 storedb.savechanges();                  //process order                 var cart = shoppingcart.getcart(this.httpcontext);                 cart.createorder(order);                  return redirecttoaction("complete",                     new { id = order.orderid });             }          }         catch         {             //invalid - redisplay errors             return view(order);         }     }      
Comments
Post a Comment