2012-08-31 9 views
5

के बजाय मॉडल मान का उपयोग करने के लिए कैसे करें कई स्थितियों में मुझे एक समस्या है जहां मेरे पास एक मॉडल है जो सर्वर पर बनाया गया मान वापस पोस्ट किए गए मानों के परिणामस्वरूप बनाया गया है। मॉडल को प्रोसेस करने पर, कुछ मॉडल मान बदल दिए जाते हैं और फिर पेज पर फिर से चलाया जाता है। क्या व्यवहार के ओवरराइड करने का कोई आसान तरीका है जो एमवीसी फ्रेमवर्क को मेरे मॉडल मान के बजाय पोस्ट किए गए मान का उपयोग करने का कारण बनता है।एमवीसी 3: एचटीएमएल को कैसे मजबूर करें। टेक्स्टबॉक्स फोरम मूल्य

उदाहरण:

मॉडल

public class MyModel { 
    public string Value1 { get; set; } 
} 

नियंत्रक

public MyController : Controller { 
    public ActionResult MyAction() { 
     var model = new MyModel(); 
     model.Value1 = "OldValue"; 
     return View(model); 
    } 
    [HttpPost] 
    public ActionResult MyAction(MyModel model) { 
     model.Value1 = "NewValue"; 
     return View(model); 
    } 
} 

देखें

@using(Html.BeginForm("MyAction", "My", FormMethod.Post) { 
    @Html.TextBoxFor(m => m.Value1) 
    <input type="submit"/> 
} 

इस पृष्ठ पहले भरी हुई है, पाठ बॉक्स "OLDVALUE" शामिल होंगे। सबमिट करने के बाद, टेक्स्ट बॉक्स में अभी भी "OldValue" है, क्योंकि सर्वर पर वापस पोस्ट किया गया था, लेकिन मैं इसे मॉडल (न्यूवैल्यू) के मान के साथ दूसरा पृष्ठ (POST के बाद) बनाना चाहता हूं।

क्या एमवीसी को इस तरह से व्यवहार करने का कोई आसान तरीका है? मुझे यकीन नहीं है कि मुझे वांछित परिणाम प्राप्त करने के लिए मुझे इस स्थिति में क्या करना है।

नोट - यह सब छद्म कोड है इसलिए मुझे कुछ त्रुटियां हो सकती हैं, लेकिन अवधारणा वहां होनी चाहिए।

उत्तर

8

आपकी पोस्ट रीडायरेक्ट में (पोस्ट - रीडायरेक्ट - पैटर्न प्राप्त करें)।

[HttpPost] 
public ActionResult MyAction(MyModel model) { 
    model.Value1 = "NewValue"; 
    return RedirectToAction("MyAction"); 
} 

संपादित

साफ़ मॉडल राज्य वापस पारित करने के लिए एक संपादित मॉडल

[HttpPost] 
    public ActionResult MyAction(MyModel model) 
    { 
     var newModel = new MyModel(); 
     newModel = model; 
     ModelState.Clear(); 
     newModel.Value1 = "NewValue"; 
     return View(newModel); 
    } 
+0

अपने सुझाव के लिए धन्यवाद, लेकिन मेरे उदाहरण सरलीकृत है और मैं वास्तव में सिर्फ पाने के लिए पुनर्निर्देशित करने के लिए नहीं करना चाहती। मुझे लगता है कि मैं यह काम कर सकता हूं, लेकिन मैं ऐसे समाधान की उम्मीद कर रहा था जो मॉडल को पोस्ट किए गए मानों को ओवरराइड कर सकता है। –

+0

@LeslieHanks - गलतफहमी के लिए खेद है, कृपया मेरा संपादन देखें। –

+0

यहां अधिक जानकारी: http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx –

0

वहाँ में निर्मित सहायकों के साथ यह करने के लिए एक तरीका नहीं है। आप इसे मैन्युअल रूप से

करने के लिए नाम पाने के लिए सहायकों का उपयोग करना है:

<input type="text" name="@Html.NameFor(m => m.MyField)" value="@Model.MyField"/> 
संबंधित मुद्दे

 संबंधित मुद्दे