2009-04-15 18 views
11

रेंडर करने के लिए मैं एक MVC अनुप्रयोग में इस मार्कअप है।MVC - अजाक्स का उपयोग करते हुए आंशिक दृश्य

<div id="ingredientlistdiv"> 
    <% Recipe recipe = (Recipe)Model; %> 
    <% Html.RenderPartial("IngredientsListControl", recipe.Ingredients); %> 
</div> 

<div id="ingrediententrydiv" align="left"> 
    <% using (Ajax.BeginForm("Add Ingredient", "Recipes/UpdateStep2", new AjaxOptions { UpdateTargetId = "ingredientlistdiv" })) 
     { %> 
    <p> 
     <label for="Units">Units:</label><br /> 
     <%= Html.TextBox("Units", 0)%> 
     <%= Html.ValidationMessage("Units", "*")%> 
    </p> 
    <p> 
     <label for="Measure">Measure:</label><br /> 
     <%= Html.TextBox("Measure")%> 
     <%= Html.ValidationMessage("Measure", "*")%> 
    </p> 
    <p> 
     <label for="IngredientName">Ingredient Name:</label><br /> 
     <%= Html.TextBox("IngredientName")%> 
     <%= Html.ValidationMessage("IngredientName", "*")%> 
    </p> 
    <p><a href="javascript:document.forms[0].submit()">Save Ingredient</a></p> 
    <%= Html.Hidden("RecipeID", recipe.RecipeID.ToString())%> 
    <% } %> 
</div> 

जब यह चलाता IngredientsListControl.ascx ब्राउज़र में एक नया पृष्ठ displayas और ingredientlistdiv अपडेट नहीं होता।

यह मेरा नियंत्रक कार्रवाई

[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult UpdateStep2(FormCollection form) 
     { 
      var factory = SessionFactoryCreator.Create(); 

      using (var session = factory.OpenSession()) 
      { 
       Recipe recipe = GetRecipe(session, Convert.ToInt32(form["RecipeID"])); 

       Ingredient ingredient = new Ingredient(); 

       ingredient.UpdateFromForm(form); 
       ingredient.Validate(ViewData); 

       if (ViewData.ModelState.Count == 0) 
       { 
        recipe.Ingredients.Add(ingredient); 
        session.Save(recipe); 
        return PartialView("IngredientsListControl", recipe.Ingredients); 
       } 


       return Content("Error"); 
      } 
     } 

Am मैं इस लाइन पर सही काम कर रही है?

return PartialView("IngredientsListControl", recipe.Ingredients); 

कि मैं कैसे div में नियंत्रण प्रस्तुत करना तो यह है नया पृष्ठ को लोड नहीं है। ???

मैल्कम

+0

से फोन हम हमेशा आंशिक नाम के लिए पूर्ण, एप्लिकेशन-रिश्तेदार पथ का उपयोग किया है, उदाहरण के लिए Html.RenderPartial ("~/दृश्य/होम/ModuleNewUser.ascx") –

+0

यह एक नया पृष्ठ के रूप में आंशिक प्रदर्शित है? या कुछ अन्य पेज? आपके आंशिक सामग्री क्या है? –

उत्तर

8

जब आप इस का उपयोग करें:

<a href="javascript:document.forms[0].submit()"> 

... आप जानते हैं कि यह के रूप में

<input type="submit" /> 

यह ऑनसबमिट ईवेंट उत्पन्न नहीं करता है एक ही नहीं है होना चाहिए, और MVC की AJAX eventhandler है नहीं बुलाया

इस मुद्दे है इस बात की पुष्टि, प्रपत्र के अंदर

<input type="submit" /> 

जोड़ सकते हैं और इसे आज़माने के लिए।

अंत में, बस ऑनसबमिट() अपने लिंक

<a href="#" onclick="document.forms[0].onsubmit()"> 
-2

RenderPartial एक क्रिया का नाम नहीं उपयोगकर्ता नियंत्रण के नाम पर ले जाता है, तो "UpdateStep2", अपने कार्य के नाम के साथ "IngredientsListControl" की जगह।

+1

क्षमा करें, लेकिन मुझे यकीन है कि यह नहीं है। यही वह है जो रेंडरएक्शन करता है जो एमवीसीफ्यूचर में शामिल है। –

2

सुनिश्चित करना है कि आप सही तरीके से अपने पृष्ठ (मास्टर पृष्ठ) में ajaxmvc और jQuery लिपियों संदर्भित किया है साबित होगी। यदि ये गलत हैं तो लक्ष्य div में सही आउटपुट के बजाय एक नया पृष्ठ प्रदर्शित किया जाएगा।

+0

बिल्कुल वही जो मैं कहना चाहता था। इसे देखकर अन्य कारण नहीं मिल सकते हैं। :) –

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