Предположение, что Вы используете MicrosoftMvcAjax, Вы могли передать обратно JavascriptResult, который предупреждает пользователя, что они достигли конца ползунка. Если ответом является JavaScript, а не содержание, обработчик MicrosoftMvcAjax выполняет его вместо того, чтобы заменить содержание DOM.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetNextImage(...)
{
if(Request.IsAjaxRequest())
{
if(CURRENT_IMAGE != LAST_IMAGE)
{
Image image = GetNextImage(...);
var partialViewResult = new PartialViewResult();
partialViewResult.ViewName = "ImageSlide";
partialViewResult.ViewData.Model = image;
return partialViewResult;
}
else
{
return JavaScript( "alert('No more images');" );
}
}
return RedirectToAction("Error", "Home");
}
, Конечно, Вы, вероятно, хотели бы быть более творческими и использовать диалоговый плагин jQuery или что-то, а не предупреждение.
Попробуйте typename :
template <class T>
class CSafeSet
{
public:
CSafeSet();
~CSafeSet();
typename std::set<T>::iterator Begin();
private:
std::set<T> _Set;
};
Там вам нужно typename, потому что оно зависит от шаблона T. Более подробная информация по ссылке над кодом. Многие из этих вещей упрощаются, если вы используете typedef:
template <class T>
class CSafeSet
{
public:
typedef T value_type;
typedef std::set<value_type> container_type;
typedef typename container_type::iterator iterator_type;
typedef typename container_type::const_iterator const_iterator_type;
CSafeSet();
~CSafeSet();
iterator_type Begin();
private:
container_type _Set;
};
Кстати, если вы хотите быть полным, вам нужно разрешить CSafeSet делать то же самое, что и набор , что означает использование пользовательский компаратор и распределитель:
template <class T, class Compare = std::less<T>, class Allocator = std::allocator<T> >
class CSafeSet
{
public:
typedef T value_type;
typedef Compare compare_type;
typedef Allocator allocator_type;
typedef std::set<value_type, compare_type, allocator_type> container_type;
typedef typename container_type::iterator iterator_type;
typedef typename container_type::const_iterator const_iterator_type;
// ...
}
И последний совет: если вы собираетесь создать оболочку для класса, постарайтесь следовать тем же соглашениям об именах, что и место происхождения класса. То есть,