<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ASP.NET MVC</title><link>https://www.dotnetzone.gr:443/cs/forums/169/ShowForum.aspx</link><description>Θέματα για web εφαρμογές, βασισμένα σε ASP.NET MVC</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: ASP.NET MVC form με ορισμένα μόνο πεδία ενός object</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/61421.aspx</link><pubDate>Fri, 10 Dec 2010 15:10:14 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:61421</guid><dc:creator>iwannis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/61421.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=169&amp;PostID=61421</wfw:commentRss><description>&lt;P&gt;Γεια χαρά,&lt;/P&gt;
&lt;P&gt;στο παράδειγμα το Application είναι ένα αντικείμενο του Business/Data Access Layer το οποίο εμφανίζεται στο View αφού μεταφέρεται ως εχει και δεν επιθυμείται τίποτα παραπάνω. Ένας τρόπος να αντιμετωπίσεις το ζήτημα που αναφέρεις είναι να φτιάξεις στο MVC project (συνήθως μέσα στον φάκελο Models για καλύτερη οργάνωση)&amp;nbsp;ένα αντικείμενο με όνομα πχ&amp;nbsp;ApplicationViewModel το οποίο θα περιέχει τα properties που επιθυμείς να διαχειριστείς, αυτό θα περνάς στο View&amp;nbsp;και αυτό θα απεικονίζεις κατόπιν στο Application αντικείμενο που θα σώσεις στη βάση σου στο Post.&lt;/P&gt;
&lt;P&gt;Υπάρχουν ωστόσο περιπτώσεις που όντως επιθυμεί κάποιος να αποκλείσει από το model binding κάποια properties του αντικειμένου. Ο πρώτος τρόπος είναι να βάλεις στο αντικείμενό σου&amp;nbsp;είτε στην παράμετρο του Action&amp;nbsp;ή στη δήλωση της κλάσης του Exclude/Include attributes.&amp;nbsp;Στο παράδειγμα που αναφέρεις όμως νομίζω ότι η πιο βολική λύση είναι&amp;nbsp;η παρακάτω:&lt;/P&gt;
&lt;P&gt;Έχεις το αντικείμενο Client:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;class&lt;/SPAN&gt; Client
{
    &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;int&lt;/SPAN&gt; ID { get; set; }
    &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;string&lt;/SPAN&gt; FirstName { get; set; }
    &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;string&lt;/SPAN&gt; LastName { get; set; }
}&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;Στο action για το POST:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:black;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;public&lt;/SPAN&gt; ActionResult Post()
{
    Client client=&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; Client();
    client.FirstName=&lt;SPAN style="BACKGROUND-COLOR:#e4e4e4;FONT-FAMILY:Courier New;COLOR:#666666;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;"John"&lt;/SPAN&gt;;
    UpdateModel(client, &lt;SPAN style="BACKGROUND-COLOR:#e4e4e4;FONT-FAMILY:Courier New;COLOR:#666666;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;""&lt;/SPAN&gt;, &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;null&lt;/SPAN&gt;,&lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;string&lt;/SPAN&gt;[] {&lt;SPAN style="BACKGROUND-COLOR:#e4e4e4;FONT-FAMILY:Courier New;COLOR:#666666;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;"FirstName"&lt;/SPAN&gt;});
    &lt;SPAN style="BACKGROUND-COLOR:transparent;FONT-FAMILY:Courier New;COLOR:blue;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;return&lt;/SPAN&gt; RedirectToAction(&lt;SPAN style="BACKGROUND-COLOR:#e4e4e4;FONT-FAMILY:Courier New;COLOR:#666666;FONT-SIZE:11px;FONT-WEIGHT:normal;"&gt;"Index"&lt;/SPAN&gt;);
}&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;Στο view είχε περάσει ένα Client object προς επεξεργασία. Το model binding γίνεται από την UpdateModel και όχι αυτόματα όπου ζητάμε στην 4η παράμετρο να εξαιρεθεί&amp;nbsp;το property FirstName. Επίσης το αντικείμενο το φτιάξαμε εμείς και όχι ο Model binder. Θα μπορούσες να φέρεις από το Repository σου το Application και κατόπιν να καλέσεις την UpdateModel including/excluding μόνο τα properties που επιθυμείς.&lt;/P&gt;</description></item><item><title>ASP.NET MVC form με ορισμένα μόνο πεδία ενός object</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/61418.aspx</link><pubDate>Fri, 10 Dec 2010 06:18:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:61418</guid><dc:creator>billaraw</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/61418.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=169&amp;PostID=61418</wfw:commentRss><description>Χαίρεται,&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Είναι το πρώτο μου post άρα ζητάω από το dotnetzone ένα δυνατό χειροκρότημα!&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Παρατηρούσα τον κώδικα αυτού εδώ του demo&amp;nbsp;&lt;a href="http://www.progware.org/Blog/page/ITPRODev-Connections-2010-Material.aspx"&gt;http://www.progware.org/Blog/page/ITPRODev-Connections-2010-Material.aspx&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Μου δημιουργήθηκε η εξής απορία. Λοιπόν μέσα τον φάκελο&amp;nbsp;SoftwareForSale.Improved\SoftwareForSale.WebMVC\Views\Applications έχει το αρχείο Edit.aspx όπου έχει όλα τα πεδία του SoftwareForSale.Logic.Application.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Όταν κάποιος κάνει submit τη φόρμα λοιπόν στον controller βλέπουμε αυτό&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; ActionResult Edit(Application UpdatedApp)
        {
            &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;if&lt;/span&gt; (ModelState.IsValid)
            {
                _appRep.PersistChanges(UpdatedApp);
                TempData[&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Result"&lt;/span&gt;] &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Success!"&lt;/span&gt;;
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;return&lt;/span&gt; RedirectToAction(&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Products"&lt;/span&gt;, &lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Applications"&lt;/span&gt;);
            }
            &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;else&lt;/span&gt;
            {
                &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;return&lt;/span&gt; View(UpdatedApp);
            }
        }&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family:Tahoma, Verdana, Arial, Helvetica, sans-serif;white-space:normal;"&gt;Βλέπουμε ότι όταν κάποιος κάνει edit από τη φόρμα περνούν τα δεδομένα σαν ένα object UpdatedApp όπου έχει όλα τα πεδία έτσι όπως τα θέλουμε. Και μετά στο repository περνάμε το object όπου τρέχει τον παρακάτω κώδικα όπου αποθηκεύει το object μας&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;pre&gt;&lt;font class="Apple-style-span" face="Tahoma, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;span class="Apple-style-span" style="white-space:normal;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Application App=Ctx.Applications.Where(x =&amp;gt; x.Id == AppToUpdate.Id).FirstOrDefault();
                Ctx.ApplyCurrentValues(&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Applications"&lt;/span&gt;, AppToUpdate);
                Ctx.SaveChanges();&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-size:11px;"&gt;&lt;span class="Apple-style-span" style="font-size:13px;"&gt;&lt;pre&gt;&lt;font class="Apple-style-span" face="Tahoma, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;pre style="white-space:normal;"&gt;&lt;span class="Apple-style-span" style="font-family:Tahoma, Verdana, Arial, Helvetica, sans-serif;white-space:normal;"&gt;Μου δημιουργήθηκε η εξής απορία. Μπορούμε να κάνουμε το ίδιο όμως στο Edit.aspx να έχει ορισμένα πεδία μόνο του "Application";&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font class="Apple-style-span" face="Tahoma, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;span class="Apple-style-span" style="white-space:normal;"&gt;Το πρόβλημα που θα δημιουργούνταν θα ήταν το εξής θα περνούσε το UpdatedApp και θα είχε σαν NULL τα πεδία που δεν υπήρχαν στη φόρμα και μετά το repository θα αποθήκευε μόνο τα πεδία που είχε ο φόρμα και όλα τα άλλα θα τα έβαζε NULL!&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font class="Apple-style-span" face="Tahoma, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;span class="Apple-style-span" style="white-space:normal;"&gt;Πώς θα μπορούσαμε λοιπόν να το κάνουμε έχοντας μία φόρμα με &lt;b&gt;μερικά &lt;/b&gt;μόνο πεδία του Application και όχι όλα.&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font class="Apple-style-span" face="Tahoma, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;span class="Apple-style-span" style="white-space:normal;"&gt;Κάτι που σκέφτηκα ήταν ότι θα μπορούσαμε να περάσουμε στο repository και το ModelState.Keys και από 'κεί στο repository με ένα foreach να αποθηκεύαμε ένα ένα τα πεδία. Όμως δεν μου αρέσει και είμαι σίγουρος ότι θα υπάρχει πιο κομψός/σωστός τρόπος.&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font class="Apple-style-span" face="Tahoma, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;span class="Apple-style-span" style="white-space:normal;"&gt;Έχετε καμιά ιδέα;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font class="Apple-style-span" face="Tahoma, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;span class="Apple-style-span" style="white-space:normal;"&gt;Δε δέχομαι την άποψη βάλε hidden τα υπόλοιπα!&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font class="Apple-style-span" face="Tahoma, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;span class="Apple-style-span" style="white-space:normal;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description></item></channel></rss>